37

将几个存储过程从 MySQL 转换为 Microsoft SQL 服务器。一切都很顺利,除了一个程序使用了 MySQLSHA1()函数。我似乎在 MS-SQL 中找不到与此等效的东西。

有谁知道SHA1()MS-SQL 上的有效等效项?

4

6 回答 6

51

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

于 2008-10-08T19:31:54.793 回答
30

如果你想得到一个 SHA1 哈希,就像 MySQL 生成的一样(即作为一个 varchar),你可以将 HashBytes 与 sys.fn_varbintohexsubstring 结合起来。例如

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 。

于 2012-08-31T01:44:03.540 回答
2

来自谷歌群组 -一种可能性

于 2008-10-08T19:34:20.450 回答
1

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

于 2011-02-07T13:02:19.957 回答
1

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"
于 2021-01-28T09:06:19.603 回答
0

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

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

于 2008-10-08T19:34:39.937 回答