使用Xamarin进行Sha512哈希处理

3
请看下面的代码:
   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为安卓设备生成一个SHA512哈希密码。然而,当我输出 "stringyHash" 时,与网上哈希服务(如: http://www.convertstring.com/Hash/SHA512)结果不同。
以下是在线工具和我的Xamarin实现中以 "password" 为例哈希字符串的差异:
Xamarin:
cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e 在线工具:
B109F3BBBC244EB82441917ED06D618B9008DD09B3BEFD1B5E07394C706A8BB980B1D7785E5976EC049B46DF5F1326AF5A2EA6D103FD07C95385FFAB0CACBC86
作为一个对哈希和Xamarin了解较少的新手,若有人能够解释两者之间的差异,并指导我如何调整代码以确保产生正确的哈希,将不胜感激。

我建议你不要在你的终端设备上进行哈希(性能)。相反,应该在你的后端(Web服务或其他)中进行。此外,你可以尝试使用.NET中的SHA512类。请参见这里:link - Ferhat Sayan
Mono可能有不同的SHA512实现,如果您想要一些一致性,请使用Bouncy Castle,http://www.bouncycastle.org/csharp/。 - Gusman
这是用于密码检查而非创建的,因此哈希密码已经存储在后端,但我不想通过可能不安全的网络发送明文密码。 - Aphire
1
@Gusman 不,SHA512的“标准”是明确的。而且Mono已经实现了它:https://ideone.com/yoHjua - xanatos
1
附注:将 SHA512 包装在 using 中,因为它是可处置的。 - Dmitry Bychenko
显示剩余5条评论
1个回答

3

这是一个空字符串的SHA-512哈希值:

cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e

该字符串长度为零。

byte[] data = shaM.ComputeHash(Encoding.UTF8.GetBytes(""));

所以,您输入到Xamarin方法中的任何内容都存在问题。


你说得完全正确,由于某种原因它接收到了一个空字符串。这个谜团解决了,谢谢。 - Aphire

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