繁体   English   中英

C#-如何缩小SHA512的大小

[英]C# - How to shrink SHA512 down to size

基于先前的答案,我能够通过输出适当的字符来解决哈希问题。 我仍然遇到长度问题,因为我得到的哈希值比我遵循的文档中预期的哈希值长得多。 api文档说使用SHA512并以“ FA35A0194E3BE7024CEFB1839CBFC922”作为示例参数,但是当我使用简单的密码(例如“ test”)运行哈希测试器以获取要传递的值时,我得到了“ EE26B0DD4AF7E749AA1A8EE3C10AE9923F618980772EE43F8A8D886A8A8D886A8E8F8A8A8D88A8A7A8A8A8A8A1E1E86F8A8E8A1E0E86A8E8E8E0E86A8E0E0E086E0E0E0E0E086E0E0E0E0E0E0E0E0A086E8E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0比我需要的更长。

仅供参考,这是我正在使用的方法:

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

希望外面的人比我有更多的经验(比没有经验多)。 像这样缩小值或取一部分值是正常的吗? 我不太确定该怎么办。

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

这显然比我需要的更长。

为什么这么明显?

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

像这样缩小值或取一部分值是正常的吗?

绝对不会

我不太确定该怎么办。

聘请专门编写安全软件的专业人员,他们可以为您编写该软件并培训您如何进行正确的维护。 您对成功编写安全软件的了解不足。 用任何一种语言编写安全系统都是最难的事情之一 编写一个实际上不受攻击的系统需要花费多年的培训和经验。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM