【发布时间】:2014-07-17 10:01:47
【问题描述】:
我需要一个产生 32 字节长度散列的散列函数。
我不能使用 MD5,因为它不安全。
所以我检查了hash_algos()函数提供的php算法。
感谢this 的帖子,我发现只有三种算法可以产生 32 字节长度的哈希:
- 哈弗128,5
- 虎 128,3
- 成熟 128
但我发现它们并不安全。
对于哈弗128已经发现了一些碰撞。确实我发现了:
攻击打破了完整的HAVAL-128
来源:http://www.securiteam.com/securityreviews/6N00C0KC0Q.html
对于我在wikipedia 上发现的 Tiger 算法,该算法的 24 轮版本没有发现任何冲突。但是算法的 24 轮版本是tiger192,4,它给出了 48 长度的哈希。
最后,对于ripemd 128,总是在wikipedia,我找到了
2004 年 8 月,据报道原始 RIPEMD 发生了冲突。这不适用于 RIPEMD-160。
那么你知道是否有一个有效的安全替代 md5 散列产生相同长度的散列?
【问题讨论】:
-
“安全”本身并没有多大意义。要问的问题是,安全防范什么?你将如何使用这个散列函数?为什么限制为 32 个字符?为什么你甚至谈论“字符”而不是字节?
-
你到底需要这个做什么?碰撞风险可能不像您想象的那么严重,具体取决于您的目的。如果它是用于文件哈希来识别更改,那么它可能就足够了;如果是用于密码,那么您不应该依赖任何类型的简单无盐哈希
-
我不知道有任何可能实现这一目标。为什么它的长度必须是 32?
-
如果安全是一个问题,在计算哈希时使用盐(无论它可能是什么)总是可取的。
-
只需使用允许您控制生成大小的哈希:
crypt允许您指定给定大小的哈希。只需确保分隔符计数 + 分隔符长度 + 哈希长度 === 32