gpt4 book ai didi

c# - Xamarin PCLCrypto SHA256 给出不同的哈希值

转载 作者:行者123 更新时间:2023-11-30 23:18:55 28 4
gpt4 key购买 nike

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

我从 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 哈希总是以“=”结尾。

为什么不同?

最佳答案

如果您使用类似 http://hash.online-convert.com/sha256-generator 的转换器您会看到这两个哈希值相同(在文本框中输入“secret”并单击“转换文件”)。

“2bb80...”字符串是散列的十六进制编码,“K7gNU...”字符串是散列的 base64 编码(这是您在调用 PCLCrypto 时要求的)。问题是散列本身是二进制数据,因此要显示它,您需要将其转换为字符串。您会看到两种常用的方法,它们都使用相同的底层哈希。

关于c# - Xamarin PCLCrypto SHA256 给出不同的哈希值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40557467/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com