1

基于先前答案的组合,我能够解决为哈希输出适当字符的问题。我仍然有长度问题,因为我得到的哈希比我关注的文档中预期的要长得多。API文档说,使用SHA512,有“FA35A0194E3BE7024CEFB1839CBFC922”作为示例参数,但是当我跑我的哈希测试仪,像“测试”一个简单的密码,以获得一个值传递到它,我得到“EE26B0DD4AF7E749AA1A8EE3C10AE9923F618980772E473F8819A5D4940E0DB27AC185F8A0E1D5F84F88BC887FD67B143732C304CC5FA9AD8E6F57F50028A8FF” - 这显然是多比我需要的更长。

仅供参考,这是我用来执行此操作的:

byte[] hashedPassword = HashAlgorithm.Create("SHA512").ComputeHash(new UTF8Encoding(false).GetBytes("test"));
Console.WriteLine(BitConverter.ToString(hashedPassword).Replace("-", ""));

希望那里有人比我有更多的经验(多于没有)与这个哈希的东西。以某种方式缩小这样的值或取其一部分是否正常?我真的不知道从这里做什么。

4

3 回答 3

24

您要求提供 512 位哈希。512 位是 64 个字节。用十六进制写的 64 个字节是 128 个字符。因此,我不明白您为什么认为这里有问题。

这显然比我需要的要长得多。

为什么这么明显?

如果它比您需要的长得多,那么您为什么首先要求 512 位哈希

以某种方式缩小这样的值或取其一部分是否正常?

绝对不是

我真的不知道从这里做什么。

聘请专门编写安全软件的专业人员,他们可以为您编写软件并培训您进行正确的维护。您对编写安全软件的知识还不够,无法成功地做到这一点。编写安全系统是用任何语言都能做到的最困难的事情之一。编写一个实际上可以抵御攻击的系统需要多年的培训和经验。

于 2012-04-26T15:38:13.533 回答
6

FIPS PUB 180-4允许截断散列。添加截断版本的主要原因是 SH512 在某些 CPU 上比 SHA256 更快,因此截断 SHA512 可能是一个有趣的选择。但是,该标准对截断的哈希使用不同的初始值。这意味着您不能只使用现成的 SHA512 实现并截断结果。

于 2012-04-26T19:59:35.077 回答
0

我不确定你是否明白这一点,但你可以将每个两字节十六进制字符转换为单字节。它看起来不像标准哈希,但它将是您期望的大小。

于 2013-10-30T19:15:48.797 回答