C# SHA-1 vs.PHP SHA-1...不同的结果?

我正在尝试从字符串中计算SHA-1哈希,但是当我使用php的sha1函数计算字符串时,我得到的东西与我在C#中尝试时不同。我需要C#来计算与PHP相同的字符串(因为php中的字符串是由我无法修改的第三方计算的)。如何让 C# 生成与 PHP 相同的哈希值?谢谢!!!

字符串 = s934kladfklada@a.com

C# 代码(生成 d32954053ee93985f5c3ca2583145668bb7ade86)

        string encode = secretkey + email;
        UnicodeEncoding UE = new UnicodeEncoding();
        byte[] HashValue, MessageBytes = UE.GetBytes(encode);
        SHA1Managed SHhash = new SHA1Managed();
        string strHex = "";

        HashValue = SHhash.ComputeHash(MessageBytes);
        foreach(byte b in HashValue) {
            strHex += String.Format("{0:x2}", b);
        }

PHP 代码 (生成 a9410edeaf75222d7b576c1b23ca0a9af0dffa98)

sha1();

答案 1

使用 ASCIIEncoding 而不是 UnicodeEncoding。PHP 使用 ASCII 字符集进行哈希计算。


答案 2

.NET 中的此方法等效于 php 中的 sha1:

string sha1Hash(string password)
{
    return string.Join("", SHA1CryptoServiceProvider.Create().ComputeHash(Encoding.UTF8.GetBytes(password)).Select(x => x.ToString("x2")));
}

推荐