Xamarin PCLCrypto SHA256 给出不同的哈希值
Xamarin PCLCrypto SHA256 give different hash
我在 Xamarin Forms 中有一个项目 XAML 可移植。我需要从字符串中获取 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
PCL我生成的加密哈希:
K7gNU3sdo+OL0wNhqoVWhr3g6s1xYv72ol/pe/Unols=
它是相同的字符串 'secret' 但会产生不同的哈希值。我还注意到 PCL加密哈希总是以“=”结尾。
为什么不同?
如果您使用像 http://hash.online-convert.com/sha256-generator 这样的转换器,您会发现这两个哈希是相同的(在文本框中输入 'secret' 并单击转换文件)。
'2bb80...' 字符串是哈希的十六进制编码,'K7gNU...' 字符串是哈希的 base64 编码(这是您在调用 PCLCrypto 时要求的)。问题是散列本身是二进制数据,因此要显示它,您需要将其转换为字符串。您会看到两种常用的方法,它们都使用相同的底层哈希。
我在 Xamarin Forms 中有一个项目 XAML 可移植。我需要从字符串中获取 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
PCL我生成的加密哈希: K7gNU3sdo+OL0wNhqoVWhr3g6s1xYv72ol/pe/Unols=
它是相同的字符串 'secret' 但会产生不同的哈希值。我还注意到 PCL加密哈希总是以“=”结尾。
为什么不同?
如果您使用像 http://hash.online-convert.com/sha256-generator 这样的转换器,您会发现这两个哈希是相同的(在文本框中输入 'secret' 并单击转换文件)。
'2bb80...' 字符串是哈希的十六进制编码,'K7gNU...' 字符串是哈希的 base64 编码(这是您在调用 PCLCrypto 时要求的)。问题是散列本身是二进制数据,因此要显示它,您需要将其转换为字符串。您会看到两种常用的方法,它们都使用相同的底层哈希。