我有一个 Xamarin Forms XAML 便携式项目。我需要从字符串中获取 SHA256。我使用 PCLCrypto 来查找哈希,因为 PCL 中不存在 System.Security.Cryptography。
我从 API 获取 sha256 来比较这些值。这是我用来获取 SHA256 哈希值的方法:
private string getSha256(string data) {
byte[] byteData = Encoding.UTF8.GetBytes(data);
var hasher = WinRTCrypto.HashAlgorithmProvider.OpenAlgorithm(HashAlgorithm.Sha256);
byte[] hash = hasher.HashData(byteData);
string hashBase64 = Convert.ToBase64String(hash);
return hashBase64;
}
我使用的字符串是“秘密”。我用这个来检查它:
http://www.xorbin.com/tools/sha256-hash-calculator http://www.xorbin.com/tools/sha256-hash-calculator它给出:
2bb80d537b1da3e38bd30361aa855686bde0eacd7162fef6a25fe97bf527a25b
但我得到两个不同的哈希码:
API 哈希:
2bb80d537b1da3e38bd30361aa855686bde0eacd7162fef6a25fe97bf527a25b
我生成的 PCLCrypto 哈希值:
K7gNU3sdo+OL0wNhqoVWhr3g6s1xYv72ol/pe/Unols=
它是相同的字符串“秘密”,但会产生不同的哈希值。我还注意到 PCLCrypto 哈希总是以“=”结尾。
为什么它们不同?
如果您使用像这样的转换器http://hash.online-convert.com/sha256-generator http://hash.online-convert.com/sha256-generator您将看到两个哈希值相同(在文本框中输入“秘密”,然后单击“转换文件”)。
“2bb80...”字符串是哈希值的十六进制编码,“K7gNU...”字符串是哈希值的 base64 编码(这是您在调用 PCLCrypto 时所要求的)。问题在于哈希本身是二进制数据,因此要显示它,您需要进行一些转换为字符串。您会看到两种常见的方法来做到这一点,两者都使用相同的底层哈希。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)