【发布时间】:2011-01-29 13:51:23
【问题描述】:
给定两个不同的字符串 S1 和 S2 (S1 != S2),是否有可能:
SHA1(S1) == SHA1(S2)
是真的吗?
- 如果是 - 概率是多少?
- 如果不是 - 为什么不呢?
- 输入字符串的长度是否存在上限,其重复概率为 0?或者 SHA1 的计算(因此重复的概率)与字符串的长度无关?
我试图实现的目标是散列一些敏感的 ID 字符串(可能与父 ID 等其他一些字段连接在一起),以便我可以使用散列值作为 ID(例如在数据库中)。
例子:
Resource ID: X123
Parent ID: P123
我不想公开我的资源标识的性质以允许客户看到“X123-P123”。
相反,我想创建一个新的列哈希(“X123-P123”),假设它是 AAAZZZ。然后客户端可以请求 id 为 AAAZZZ 的资源并且不知道我的内部 id 等。
【问题讨论】:
-
由于 SHA-1 的长度是 160 位,因此对于固定字符串的概率总是高于 2^-160。
-
假设暴力攻击,均匀分布
-
是的,冲突是可能的。但你更有可能赢得强力球。更有可能。除非您使用哈希作为键,否则我看不出这怎么会成为一个问题,虽然这是一个非常有吸引力的提议,但不建议这样做。
-
确实,我正在考虑使用哈希作为我的资源的 id。
-
这个想法看起来不错,但为什么呢?不过你可以。
标签: cryptography hash sha1 checksum