php 32字节长度安全散列

时间:2014-07-17 10:01:47

标签: php hash md5

我需要一个产生32字节长度哈希的哈希函数。 我不能使用MD5,因为它不安全 所以我检查了hash_algos()函数提供的php算法。 感谢this帖子,我发现只有三种算法产生32字节长度哈希:

  • Haval 128,5
  • Tiger 128,3
  • Ripemd 128

但我发现所有这些都不安全。

对于haval 128已经发现了一些碰撞。的确,我发现:

  

攻击打破了全部HAVAL-128
  来源:http://www.securiteam.com/securityreviews/6N00C0KC0Q.html

对于我在wikipedia找到的Tiger算法,发现24轮版本的算法没有发生碰撞。但算法的24轮版本是tiger192,4,它给出了48个长度哈希值。

最后,对于成熟的128,总是在wikipedia,我发现

  

2004年8月,原始RIPEMD发生了碰撞。这不适用于RIPEMD-160。

所以你知道md5哈希是否有一个有效的安全替代产生相同长度的哈希?

1 个答案:

答案 0 :(得分:0)

  

但算法的24轮版本是tiger192,4,它提供48长度散列。

tiger192,4版本实际上是32轮而不是24轮(tiger192,3 iirc);那么为什么不使用它,但用base-64编码结果?

$data = 'hello';
echo base64_encode(hash('tiger192,4', $data, true));
// 6OUOI5+TKhw1cZTl6tD1KNwq6/6u0Bx0

要求hash()函数返回原始结果,然后传递给base64_encode();它将完全适合32个字节。使用hash_hmac()时也是如此。

这假设您没有使用它来进行密码散列,因为您应该使用password api来进行密码散列。