In Microsoft SQL Server you can hash using T-SQL[1]:
declare @hash varchar(200)
set @hash = '15174141714252'
print hashbytes('MD5', @hash)
This is a nifty feature, of course, because you can now send your passwords over the unsecured SQL connection and do your hashing on the server. Secure your connection [2], please, before doing this.
Note the use of varchar(200) in the code block. The Microsoft sample shows the use of nVarChar. Does it matter what we use? Turns out, yes. The code block above returns:
0x5B17965D4E33B04FD8848E536165D013
That is also the same hash produced using System.Encoding.GetBytes(blah) and the .NET MD5 digest provider.
If you opt to use nVarChar:
declare @hash nvarchar(200)
set @hash = convert(nvarchar(200), '15174141714252')
print hashbytes('MD5', @hash)
You will get something different:
0xBA48394E1385A2C633AB7F8339231B56
nVarChar and nChar use Unicode encoding [3] to process the string bytes. The default encoding on your system may not be Unicode, so you have to be especially careful. If you used nvarchar in your update command, but varchar in your stored procedure that took the password in plain text, you would likely produce a bunch of hashes that will not match.
[1] https://msdn.microsoft.com/en-us/library/ms174415.aspx
[2] https://technet.microsoft.com/en-us/library/ms189067(v=sql.105).aspx
[3] https://msdn.microsoft.com/en-us/library/ms186939.aspx
declare @hash varchar(200)
set @hash = '15174141714252'
print hashbytes('MD5', @hash)
This is a nifty feature, of course, because you can now send your passwords over the unsecured SQL connection and do your hashing on the server. Secure your connection [2], please, before doing this.
Note the use of varchar(200) in the code block. The Microsoft sample shows the use of nVarChar. Does it matter what we use? Turns out, yes. The code block above returns:
That is also the same hash produced using System.Encoding.GetBytes(blah) and the .NET MD5 digest provider.
If you opt to use nVarChar:
declare @hash nvarchar(200)
set @hash = convert(nvarchar(200), '15174141714252')
print hashbytes('MD5', @hash)
You will get something different:
0xBA48394E1385A2C633AB7F8339231B56
nVarChar and nChar use Unicode encoding [3] to process the string bytes. The default encoding on your system may not be Unicode, so you have to be especially careful. If you used nvarchar in your update command, but varchar in your stored procedure that took the password in plain text, you would likely produce a bunch of hashes that will not match.
[1] https://msdn.microsoft.com/en-us/library/ms174415.aspx
[2] https://technet.microsoft.com/en-us/library/ms189067(v=sql.105).aspx
[3] https://msdn.microsoft.com/en-us/library/ms186939.aspx