在C#中计算哈希SHA1

时间:2014-03-27 13:45:33

标签: c# sha1 password-encryption

在旧系统中,我们在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代码返回的字节数。

有人可以帮助我吗?

1 个答案:

答案 0 :(得分:2)

UTF8Encoding.Default更改为Encoding.Unicode,结果将匹配。 SQL Server HashBytes函数在执行实际哈希之前将NCHARNVARCHAR转换为字节时使用UTF16。