使用sha256对字符串进行散列(如密码)时,我正在散列的字符串长度是否有限制?例如,对#l = 64个字符的字符串进行散列是否“安全”?
答案 0 :(得分:49)
技术上存在限制,但它非常大。用于SHA-256的填充方案要求输入的大小(以位为单位)表示为64位数。因此,最大尺寸为(2 64 -1)/ 8字节〜= 2'091'752太字节。
这使得几乎的限制完全是理论上的,而不是实际的。
大多数人无论如何都没有几乎那么多数据的存储空间,但即使他们这样做,连续处理它以生成单个散列也需要花费大量时间来考虑禁止。
一种快速的信封式计算表明,即使在Tom的硬件上列出了当前 1 的最快的企业级SSD,并将它们剥离16宽以提高带宽,只需读取该数量数据仍需要大约220年。
1.截至2016年4月。 功能
答案 1 :(得分:5)
除了2 64 -1位的最大消息大小之外,没有这样的限制。 SHA2经常用于生成可执行文件的哈希值,这些哈希值往往比几十个字节大得多。
答案 2 :(得分:1)
上限在NIST标准FIPS 180-4中给出。上限的原因是填充方案。邮件长度l
最后在填充过程中附加到邮件中。
然后附加等于表示的数字
l
的64位块 使用二进制表示形式
因此,按照NIST标准,SHA-256可以哈希的最大文件大小为2 ^ 64。