在旧系统中,我们在SQL Server中有以下密码。
select HashBytes('SHA1' , Convert(nvarchar(4000),'MyPassword'))
现在,导致很多非功能性需求,我们必须在C#中计算相同的密码。
我最好的尝试是:
public static byte[] CalculateSHA1(string text)
{
byte[] buffer = UTF8Encoding.Default.GetBytes(text);
SHA1CryptoServiceProvider cryptoTransformSHA1 = new SHA1CryptoServiceProvider();
return cryptoTransformSHA1.ComputeHash(buffer);
}
但它返回的字节数不同于SQL代码返回的字节数。
有人可以帮助我吗?
答案 0 :(得分:2)
将UTF8Encoding.Default
更改为Encoding.Unicode
,结果将匹配。 SQL Server HashBytes
函数在执行实际哈希之前将NCHAR
和NVARCHAR
转换为字节时使用UTF16。