这个问题已经在这里有一个答案:
- SQL Server的VARBINARY与BitConverter.ToInt64值BIGINT是不同的 1个回答
我想创建一个通用散列alogrithim该散列字符串作为一个64位的整型。
我能够正确地散列字符串:SQL:
select
convert
(
varchar(64),
HASHBYTES
(
'SHA1',
'google.com'
),
2
)
返回BAEA954B95731C68AE6E45BD1E252EB4560CDC45
C#
System.Security.Cryptography.SHA1 c = System.Security.Cryptography.SHA1.Create();
System.Text.StringBuilder sb = new StringBuilder();
byte[] b = c.ComputeHash(Encoding.UTF8.GetBytes("google.com"));
for (int i = 0; i < b.Length;i++ )
{
byte by = b[i];
sb.Append(by.ToString("x2").ToUpper());
}
return sb.ToString();
retruns BAEA954B95731C68AE6E45BD1E252EB4560CDC45
然而,当我转换为一个BIGINT /长值不匹配:SQL:
select
convert
(
bigint,
HASHBYTES
(
'SHA1',
'google.com'
)
)
返回2172193747348806725
C#:
System.Security.Cryptography.SHA1 c = System.Security.Cryptography.SHA1.Create();
byte[] b = c.ComputeHash(Encoding.UTF8.GetBytes("google.com"));
return BitConverter.ToInt64(b, 0);
返回7501998164347841210
如何获得这些数字的任何想法,以配合?