请考虑以下代码:
SHA512 shaM = new SHA512Managed();
byte[] data = shaM.ComputeHash(Encoding.UTF8.GetBytes("password"));
StringBuilder sBuilder = new StringBuilder();
for (int i = 0; i < data.Length; i++)
{
sBuilder.Append(data[i].ToString("x2"));
}
string stringyHash = sBuilder.ToString();
我使用上面的方法为使用Xamarin的Android设备生成SHA512哈希密码。但是当我输出stringyHash
时,我会得到一个与我在使用在线哈希服务时所期望的完全不同的哈希,例如:
http://www.convertstring.com/Hash/SHA512
散列字符串&#34;密码&#34;的区别在线工具和我的Xamarin实现之间如下:
Xamarin:
cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e
在线工具:
B109F3BBBC244EB82441917ED06D618B9008DD09B3BEFD1B5E07394C706A8BB980B1D7785E5976EC049B46DF5F1326AF5A2EA6D103FD07C95385FFAB0CACBC86
我对Xamarin相对较新,并且几乎没有使用散列作为概念的经验,所以如果有人能解释为什么两者不同,以及如何调整我的代码以确保我生成正确的哈希,我们将不胜感激。
答案 0 :(得分:2)
cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e
是零长度字符串的SHA-512哈希:
byte[] data = shaM.ComputeHash(Encoding.UTF8.GetBytes(""));
因此,您在Xamarin方法中提供的任何内容都存在问题。