我正在为特定项目使用SHA1 / 2系列算法。我想知道是否所有SHA算法都返回固定长度的哈希,而不管数据的长度如何。

#1 楼

基本上是的,它们确实可以。

取决于您选择的确切哈希函数,取决于您期望的输出长度。例如,SHA256产生256位输出。

这确实引出了一个问题,“但是哈希的长度是固定的,并且有无限可能的输入?? !!”。正确,只是$ 2 ^ {256} $是115792089237316195423570985008687907853269984665640564039457584007913913129639936。这是可能传递的很多唯一可能的输入。

您可能想知道文件系统中使用了相同的概念-它们被称为位图,并提供了一个块到位的映射,因此文件系统可以快速找到可用的块。数字按比例缩放:)

评论


$ \ begingroup $
我看不到位域与散列有任何关系。在某些文件系统中,哈希是必不可少的(例如git),但在您的链接中我看不到任何迹象。这些位图仅具有1位到1的块映射。
$ \ endgroup $
– CodesInChaos
2012年3月20日10:22



$ \ begingroup $
@CodeInChaos也许我应该添加一些额外的解释,但是,散列函数实际上会吞噬数据块,并为您提供一些字符串输出。每个位串都映射到输入块的特定组合(由哈希函数进行映射)。这里的所有都是它的。当您查看您可以拥有的唯一此类组合数量的大小(在这种情况下为$ 2 ^ 256 $),并且这些独特组合映射到全部块的事实时,您会意识到存在大量潜在输入。
$ \ endgroup $
–user46
2012-03-20 10:47

$ \ begingroup $
两者都将大集合映射为较小集合。安全散列映射的方式难以逆转。分配图应该易于逆转。您也可以将它们视为有损压缩功能,其损失可根据应用程序需求进行调整。
$ \ endgroup $
–格兰特·布拉哈·埃拉特(Grant BlahaErath)
2012年3月22日在22:28

$ \ begingroup $
可能的输入不是无限的!在您的情况下,即SHA-256,最大输入大小为$ 2 ^ {64} -1 $位。可能的输入数量绝对是巨大的,但不是无限的。
$ \ endgroup $
– saeedn
16 Sep 14 '17:57



$ \ begingroup $
@saeedn根据您的评论,我将无法为9个字节的文件计算哈希值。 SHA-256通过处理块来计算哈希吗?您是说最大数量的块吗?
$ \ endgroup $
–yucer
17年4月19日在19:16



#2 楼

是。根据FIPS 180-4中的定义,SHA-1的输出中恰好
160位
SHA-224的输出中恰好224位
SHA-256的输出中
256位SHA-384输出中的位
SHA-512输出中的512位
SHA-512/224输出中的224位
SHA-512/256输出中的256位

评论


$ \ begingroup $
SHA-256实际上是SHA-2 256,SHA-3竞赛将产生与SHA-2相同的输出,这是组织竞赛的NIST的要求。命名仍然是一个问题,但是SHA-3-256(等等)将是一个可能的选择。 SHA-512在64位计算机上比SHA-256更快,因为它已针对64位计算机进行了优化-并且仍提供更大的安全性。
$ \ endgroup $
–马腾·博德威斯♦
2012-03-20 23:40

$ \ begingroup $
@owlstead:我使用的名字是正确的,答案的第一行是官方的,也新鲜的(发布于2012年3月)。您有关于SHA-2 256命名的参考吗?
$ \ endgroup $
–fgrieu♦
2012年3月21日12:50



$ \ begingroup $
不,我是说它属于SHA-2安全哈希算法套件的一部分,对此感到抱歉。您可以想象命名SHA-3候选对象有点麻烦,因为已经采用了SHA-256等。是AHS还是SHA-3-256,谁可以告诉:)
$ \ endgroup $
–马腾·博德威斯♦
2012年3月21日在16:01

#3 楼

是的,那是他们的想法。您可以依靠它。

#4 楼


我想知道是否所有SHA算法都返回固定长度的哈希,而不考虑数据的长度?


其他人指出输出确实是一个恒定的固定大小,所以为了完整性,让我一提一提:

值得注意这些哈希函数确实限制了其数据的输入大小。这样输入长度本身就有一个上限。

从FIPS 180-4开始:


SHA-1,SHA-224,SHA-256:输入长度限制为$ 2 ^ {64} $位。
SHA-384,SHA-512,SHA-512 / 224,SHA-512 / 256:输入长度限制为$ 2 ^ {128} $位。

它们的尺寸非常大(似乎只有SHA-1,SHA-224和SHA-256的尺寸才能实际应用于电磁存储)。但是从理论上说,$ 2 ^ {64} $位(约1 exbibyte)的限制可能会禁止从非常大的数据库或分布式文件系统之类的东西中计算一个哈希。

但是对于大多数开发人员而言,这些输入大小限制几乎不存在。

评论


$ \ begingroup $
综上所述,现代CPU的SHA-1性能约为0.7个周期/位。假设时钟为5 GHz,则散列$ 2 ^ {64} $位将花费80年。更多的CPU没有帮助。
$ \ endgroup $
–fgrieu♦
2012年3月24日8:35



$ \ begingroup $
感谢您的观点,我没有想到要处理这些数字。那么$ 2 ^ {64} $的限制实际上也无关紧要。
$ \ endgroup $
– B-Con
2012年3月24日18:55