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() 的功能?

R中是不是有等效于“count if”函数的功能?

Pyspark 中是不是有等效于 SQL 的 MSCK REPAIR TABLE 的方法

Asp.Net Core 2 中是不是有等效于“HttpContext.Response.Write”的内容?

PostgreSql中是不是有等效于sp_getapplock,sp_releaseapplock的?

在 RSpec 中,是不是有等效于“unstub”但用于“should_receive”的方法?