我们在代码的许多部分中使用 md5 作为哈希算法。
在此上下文中的安全性不是问题。我们只是使用 md5 作为生成唯一标识符的方法,以在 apc 等中存储各种项目。
碰撞是个问题。尽管不太可能,但它会导致一些重大问题。
有人想建议在 CPU 上做些更轻便的事情吗?
谢谢。
我们刚刚用 md5 和 crc32 做了一些测试。
使用以下代码段:
<?
$start=microtime(true);
for($i=1;$i<=1000000;$i++){
md5(rand(10000000,99999999)); <--- crc32 tested here too.
}
$end=microtime(true);
echo $end-$start."\n";
?>
结果如下:
MD5:
1.4991459846497
1.7893800735474
1.4672470092773
crc32:
0.97880411148071
0.94331979751587
0.93316197395325
所以看起来 crc32 比使用 md5 快大约 1/3。
最佳答案
非常很难(几乎不可能,真的)击败 CRC32 或其变体,因为它是如此微不足道(跨单个 32 位字的滚动 XOR)。此外,由于 crc32
作弊并跳转到 native 代码,除非其他解决方案也这样做,否则 native CRC32 实现很可能不会被打败。
但是,它的空间也比 MD5 小得多。权衡取舍好吗? CRC32 通常只用于基本的错误检测/成帧...(它实际上是一个“校验和”,而不是用于实际对话目的的“散列”函数。)
快乐编码。
此外,您的数字只显示减少了 2/3 ;-) 无论如何,我怀疑这不是 主要瓶颈,强烈建议使用一种可行的算法——无论是 MD5或 SHA1 或其他。 MD5 的计算成本仅比 SHA1 略低(在一个数量级内),但实现可能起到了一定的作用。如果需要,也可以对此运行基准...
关于php - 当安全性不受威胁时,php 中可用的最高性能散列算法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6639666/