MS-SQL中是否有与SHA1()等效的函数?

40

将几个存储过程从MySQL转换到Microsoft SQL Server。一切都很顺利,但是有一个存储过程使用了MySQL的SHA1()函数。我无法找到在MS-SQL中等效的替代品。

有人知道在MS-SQL中SHA1()的有效替代品吗?


1
如果这是用于密码存储,我觉得有必要提醒一下,在大多数情况下,仅仅对原始字符串进行哈希处理是不够安全的。原因在于:http://www.md5decrypter.co.uk/sha1-decrypt.aspx ... 这只是其中之一... 因为存在大量彩虹表,所以反向解密未加盐的密码现在变得非常容易。 - dodexahedron
6个回答

52

SQL Server 2005及更高版本拥有HashBytes()函数。


10
看起来完美,我边解决问题边上厕所。我喜欢Stack Overflow。谢谢! - GEOCHET
1
现在如果他们能支持256位算法而不仅仅是160位就好了。 - Joel Coehoorn

32

5

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"

不错。CONVERT函数的二进制样式2返回的是没有0x的VARCHAR类型。 - undefined

2

1

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接