SHA-256 的消息大小有限制吗?

问题描述 投票:0回答:4
当使用 SHA-256 对字符串(如密码)进行哈希处理时,我正在哈希处理的字符串的长度是否有限制?例如,只有对小于 64 个字符的字符串进行哈希处理才“安全”吗?

hash sha256
4个回答
88
投票
技术上有限制,但相当大。用于 SHA-256 的填充方案要求输入的大小(以位为单位)表示为 64 位数字。因此,最大大小为 (2

64-1)/8 字节 ~= 2'091'752 TB。

这使得极限

几乎完全是理论上的,而不是实际的。

无论如何,大多数人都没有足够的存储空间,但即使他们有,串行处理所有数据以生成单个散列也会花费大多数人认为令人望而却步的时间。

快速粗略的计算表明,即使使用 Tom 硬件上目前列出的最快企业级 SSD

1,并将其条带化为 16 宽以提高带宽,仅读取该数据量仍需要大约 220年。


1. 截至 2016 年 4 月。


7
投票
除了最大消息大小 2

64-1 位之外,没有这样的限制。 SHA2 经常用于生成可执行文件的哈希值,这些可执行文件往往比几十个字节大得多。


1
投票
NIST 标准

FIPS 180-4 中给出了上限。设置上限的原因是“填充方案”,以对抗 Merkle-Damgard 构造工件的 MOV 攻击。消息长度 l 最后在填充期间附加到消息中。

然后附加等于使用二进制表示形式表示的数字

l
的64位块

因此,根据 NIST 标准,可以使用 SHA-256 进行哈希处理的最大文件大小为 

2^64-1
(约 2.305 艾字节 - 接近于

估计的 NSA 犹他州数据中心的下限范围

,因此您不需要不用担心)。
NIST 启用大小为零的消息的哈希。因此消息长度从 0

开始到

2^64-1

如果您需要对大于 
2^64-1

的文件进行哈希处理,请使用具有

2^128-1

 限制的 SHA-512 或使用没有限制的 SHA3。

很有趣,你会在这里谈论“

0
投票
”。 虽然问题是“

字符”的数量。 例如:

密码不会是 2.3

exabytes
    。 设置最大长度的原因,拒绝服务攻击的可能性。
  • 有人可以将 exabytes
  • 输入密码字段, 将您的服务器 CPU 或内存推向极限, 这会严重影响交通。
所以要回答这个问题,我会说:

“不,哈希没有真正的限制,你可以在里面放入数百万个字符”

虽然:“我们为密码字段设置了最大字符数”

因此我们可以防止这些拒绝服务攻击。

© www.soinside.com 2019 - 2024. All rights reserved.