SHA1哈希在Windows Phone 8.1应用程序和UWP应用程序之间不一样

时间:2016-07-31 04:37:27

标签: c# uwp sha1 windows-10-universal

在Windows Phone 8中,我能够做到这样的事情:

 SHA1Managed s = new SHA1Managed();
 UTF8Encoding enc = new UTF8Encoding();
 s.ComputeHash(enc.GetBytes(password.ToCharArray()));
 string hash = BitConverter.ToString(s.Hash).Replace("-", "").ToLower();

对于我正在做的UWP App:

IBuffer buffUtf8Msg = CryptographicBuffer.ConvertStringToBinary(password, BinaryStringEncoding.Utf8);

HashAlgorithmProvider objAlgProv = HashAlgorithmProvider.OpenAlgorithm(HashAlgorithmNames.Sha1);

IBuffer buffHash = objAlgProv.HashData(buffUtf8Msg);

if (buffHash.Length != objAlgProv.HashLength)
{
    throw new Exception("There was an error creating the hash");
}

string strHashBase64 = CryptographicBuffer.EncodeToBase64String(buffHash);

string hash = strHashBase64.Replace("-", "").ToLower();

我没有得到相同的结果。

例如,如果我有文本" Windows 8",我会得到

6517856f8c3a3fda3ae28305a05d127f0e1bdb97(Windows Phone 8.1)

zrefb4w6p9o64omfof0sfw4b25c=(UWP)

我不太清楚我做错了什么。目标是获取字符串的SHA1哈希值。

1 个答案:

答案 0 :(得分:3)

而不是在UWP代码(CryptographicBuffer.EncodeToBase64String(buffHash))下编码为base64,您可能希望使用以下代码编码为十六进制:

string strHex = CryptographicBuffer.EncodeToHexString(buffHash);
string hash = strHex.ToLower();

因此,您的Windows Phone 8代码和UWP代码都将生成相同的输出(十六进制编码 SHA1)。