Windows Phone 8.1 应用程序和 UWP 应用程序之间的 SHA1 哈希值不同
SHA1 Hash not the same between Windows Phone 8.1 app and UWP app
在 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 应用程序:
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 哈希值。
不是在 UWP 代码下编码为 base64 (CryptographicBuffer.EncodeToBase64String(buffHash)
),您可能想要编码为十六进制:
string strHex = CryptographicBuffer.EncodeToHexString(buffHash);
string hash = strHex.ToLower();
因此您的 Windows Phone 8 代码和 UWP 代码将产生相同的输出(十六进制编码 SHA1)。
在 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 应用程序:
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 哈希值。
不是在 UWP 代码下编码为 base64 (CryptographicBuffer.EncodeToBase64String(buffHash)
),您可能想要编码为十六进制:
string strHex = CryptographicBuffer.EncodeToHexString(buffHash);
string hash = strHex.ToLower();
因此您的 Windows Phone 8 代码和 UWP 代码将产生相同的输出(十六进制编码 SHA1)。