在MS-SQL中是否有等效的SHA1()?

时间:2008-10-08 19:30:03

标签: sql mysql sha1 tsql sql-server

将一些存储过程从MySQL转换为Microsoft SQL服务器。除了一个使用MySQL SHA1()函数的过程外,一切进展顺利。我似乎无法在MS-SQL中找到与此相同的内容。

有没有人知道MS-SQL上SHA1()的有效等价物?

6 个答案:

答案 0 :(得分:46)

SQL Server 2005及更高版本具有HashBytes()功能。

答案 1 :(得分:19)

如果你想获得一个完全像MySQL生成它的SHA1哈希(即作为varchar),你可以将HashBytes与sys.fn_varbintohexsubstring结合起来。 E.g。

SELECT sys.fn_varbintohexsubstring(0, HashBytes('SHA1', 'password'), 1, 0)

有关详细信息,请参阅http://accessrichard.blogspot.co.nz/2010/12/sql-server-and-net-equivalent-to-php.html

答案 2 :(得分:2)

来自google群组 - A Possibility

答案 3 :(得分:1)

您可能还想查看http://www.stev.org/post/2011/01/30/MS-SQL-SHASum-Support.aspx您应该能够修改它以生成您想要的任何内容。虽然可能需要一些c#编码。

答案 4 :(得分:0)

我不相信有原生支持,但你可能想看看这个......

http://blogs.msdn.com/sqlcat/archive/2005/09/16/469257.aspx

答案 5 :(得分:0)

MSSQL 服务器

HASHBYTES('SHA1', CAST('abcd@#' as nvarchar(max)))
CONVERT(VARCHAR(MAX), HASHBYTES('SHA1', CAST('abcd@#' as nvarchar(max))) , 2)

/* result */
0x77DD873DBAB2D81786AB9AE6EA91B1F59980E48C  
77DD873DBAB2D81786AB9AE6EA91B1F59980E48C

C#

using (SHA1Managed sha1 = new SHA1Managed())
{
    string input = "abcd@#";
    var hash = sha1.ComputeHash(Encoding.Unicode.GetBytes(input));
    var sb = new StringBuilder(hash.Length * 2);
    
    foreach (byte b in hash)
    {
        sb.Append(b.ToString("X2")); // can be "x2" if you want lowercase
    }
    return sb.ToString();
}
//result "77DD873DBAB2D81786AB9AE6EA91B1F59980E48C"