Tuesday, December 28, 2010

The SQL Server and .Net equivalent of PHP and MySQL's SHA1 function

In PHP and MySql there is an sha1(str) function which generates an sha1 hash of a string.

Their usages are simple:
   echo sha1('password');
mysql> select sha1('password');
| sha1('password')                         |
| 5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8 |
1 row in set (0.00 sec)
Similarly, .Net has an SHA1 method within the System.Security.Cryptography  namespace which can be used in the following manner to generate the same hash.
 public static string Sha1(string hashStr, Encoding encoding)
   var sha1 = new System.Security.Cryptography.SHA1CryptoServiceProvider();
   var hash = sha1.ComputeHash(encoding.GetBytes(hashStr));
   return BitConverter.ToString(hash).Replace("-", "");            

Console.WriteLine(Sha1("password", Encoding.ASCII)); -> 
In SQL Server there is a HashBytes function which can return the sha1 hash as well. Since the HashBytes function returns a varbinary, the result can be converted to a string using a sql server system function in order to match the php or mysql function.
select sys.fn_varbintohexsubstring(0, HashBytes('SHA1', 'password'),1,0)

(1 row(s) affected)

No comments:

Post a Comment