C# - 如何将SHA512缩小到大小

时间:2012-04-26 15:31:43

标签: c# security encryption passwords hash

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

仅供参考,我正在使用这个:

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

希望有人在这里使用这些哈希的东西比我做的更多(不过没有)。以某种方式缩小这样的值或者占用它的某个部分是正常的吗?我不确定该怎么做。

3 个答案:

答案 0 :(得分:23)

你要求512位哈希。 512位是64字节。以十六进制写的64字节是128个字符。因此,我不明白为什么你认为这里出了问题。

  

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

为什么这很明显?

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

  

以某种方式缩小这样的值或者占用它的某个部分是正常的吗?

绝对不是

  

我不确定该怎么做。

聘请专业编写安全软件的专业人员,他们可以为您编写软件并培训您正确的维护。你不太了解编写安全软件是否成功。编写安全系统是任何语言中最难以做到的事情之一;编写一个实际上可以抵御攻击的系统需要多年的培训和经验。

答案 1 :(得分:5)

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

答案 2 :(得分:0)

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