MS-SQL 中是不是有等效于 SHA1() 的方法?
Posted
技术标签:
【中文标题】MS-SQL 中是不是有等效于 SHA1() 的方法?【英文标题】:Is there an equivalent to SHA1() in MS-SQL?MS-SQL 中是否有等效于 SHA1() 的方法? 【发布时间】:2010-09-16 02:45:33 【问题描述】:将几个存储过程从 mysql 转换为 Microsoft SQL Server。一切都很顺利,除了一个程序使用了 MySQL SHA1()
函数。我似乎在 MS-SQL 中找不到与此等效的。
有人知道 MS-SQL 上 SHA1()
的有效等效项吗?
【问题讨论】:
如果这是用于密码存储,我不得不提一下,在大多数情况下,简单地对原始字符串进行哈希处理是不够的。原因如下:md5decrypter.co.uk/sha1-decrypt.aspx ...除此之外...有大量的彩虹表,因此如今撤销未加盐的密码非常简单。 【参考方案1】:SQL Server 2005 及更高版本具有HashBytes() 函数。
【讨论】:
看起来很完美,在我泄漏的时候得到了回答。我喜欢***。谢谢! 现在,如果他们只是获得对 256 位算法的支持,而不仅仅是 160 位算法【参考方案2】:如果您想获得与 MySQL 生成的 SHA1 完全相同的哈希(即作为 varchar),您可以将 HashBytes 与 sys.fn_varbintohexsubstring 结合使用。例如
SELECT sys.fn_varbintohexsubstring(0, HashBytes('SHA1', 'password'), 1, 0)
更多详情请见http://acces-s-richard.blogspot.co.nz/2010/12/sql-server-and-net-equivalent-to-php.html。
【讨论】:
【参考方案3】:来自谷歌群组 - A Possibility
【讨论】:
【参考方案4】:您可能还想查看http://www.stev.org/post/2011/01/30/MS-SQL-SHASum-Support.aspx,您应该能够对其进行修改以产生您想要的任何东西。虽然可能需要一些 c# 编码。
【讨论】:
【参考方案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"
【讨论】:
【参考方案6】:我不相信有原生支持,但你可能想看看这个......
http://blogs.msdn.com/sqlcat/archive/2005/09/16/469257.aspx
【讨论】:
以上是关于MS-SQL 中是不是有等效于 SHA1() 的方法?的主要内容,如果未能解决你的问题,请参考以下文章
Dojo 是不是有等效于 jQuery.trigger() 的功能?
Pyspark 中是不是有等效于 SQL 的 MSCK REPAIR TABLE 的方法
Asp.Net Core 2 中是不是有等效于“HttpContext.Response.Write”的内容?