Xamarin PCLCrypto SHA256会生成不同的哈希值

3

我有一个使用Xamarin Forms XAML portable的项目,我需要从一个字符串中获取SHA256。由于PCL中不存在System.Security.Cryptography,因此我使用PCLCrypto来查找我的哈希。

我从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;
        }

我使用的字符串是“secret”。我用以下方式进行检查:

http://www.xorbin.com/tools/sha256-hash-calculator 它给出的结果是:

2bb80d537b1da3e38bd30361aa855686bde0eacd7162fef6a25fe97bf527a25b

但我得到了两个不同的哈希码:

API哈希: 2bb80d537b1da3e38bd30361aa855686bde0eacd7162fef6a25fe97bf527a25b

我生成的PCLCrypto哈希: K7gNU3sdo+OL0wNhqoVWhr3g6s1xYv72ol/pe/Unols=

它们都是相同的字符串“secret”,但产生了不同的哈希值。我还注意到PCLCrypto哈希总是以“=”结尾。

它们为什么不同?

1个回答

2
如果您使用像http://hash.online-convert.com/sha256-generator这样的转换器,您会发现两个哈希值是相同的(在文本框中输入“secret”,然后单击“Convert File”)。
“2bb80…”字符串是哈希的十六进制编码,“K7gNU…”字符串是哈希的base64编码(这是您在调用PCLCrypto时请求的)。问题在于哈希本身是二进制数据,所以要显示它,您需要将其转换为字符串。您看到了两种常见的方法,都使用相同的基础哈希。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接