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

jam*_*mes 1 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("-", ""));
Run Code Online (Sandbox Code Playgroud)

希望有人在这里有比我更多的经验(不止一个).以某种方式缩小这样的值或者占用它的某个部分是正常的吗?我不确定从这里做什么.

Eri*_*ert 23

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

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

为什么这很明显?

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

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

绝对不是.

我不确定从这里做什么.

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

  • @james:如果您的问题确实是"如何使这个记录不良的遗留系统工作",那么我认为StackOverflow不太可能帮助您.找到编写遗留系统的人并询问他们,或者阅读遗留系统的源代码,或者从二进制文件中反向设计源代码,或者其他任何东西. (11认同)
  • @james:你确定你的系统期待SHA512哈希吗?如果它期望128位,而不是512,那么它可能期望MD5哈希.(注意,MD5现在被认为是某些应用程序的弱算法;如果你可以使用SHA512或SHA256,你应该这样做.) (2认同)
  • 截断哈希并不罕见.截断的哈希应该仍然具有与使用该大小设计的哈希相同的属性.虽然建议对不同大小使用不同的初始状态,但仅在非常特定的情况下才有意义.例如,SHA-384是截断的SHA-512,具有不同的初始化值. (2认同)

bla*_*lah 5

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