我需要一个产生32字节长度哈希的哈希函数。
我不能使用MD5,因为它不安全
所以我检查了hash_algos()
函数提供的php算法。
感谢this帖子,我发现只有三种算法产生32字节长度哈希:
但我发现所有这些都不安全。
对于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哈希是否有一个有效的安全替代产生相同长度的哈希?
答案 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来进行密码散列。