当安全性不受威胁时,php中可用的最高性能哈希算法是什么?

ano*_*one 9 php hash performance md5

我们在代码的许多部分使用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";
?>
Run Code Online (Sandbox Code Playgroud)

结果如下:

MD5:

1.4991459846497
1.7893800735474
1.4672470092773
Run Code Online (Sandbox Code Playgroud)

CRC32:

0.97880411148071
0.94331979751587
0.93316197395325
Run Code Online (Sandbox Code Playgroud)

因此看起来crc32比使用md5快约1/3.

小智 8

这将是非常艰难(几乎是不可能的,真的)击败CRC32或变体,因为它是如此的微不足道的(在单个32位字滚动XOR).此外,由于crc32作弊和跳转到本机代码,除非其他解决方案也这样做,否则本机CRC32实现的可能性不会被打败.

但是,它也有很多比MD5更小的空间.权衡是否还可以?CRC32通常仅用于基本错误检测/成帧...(它实际上是一个"校验和",而不是用于实际会话目的的"散列"功能.)

快乐的编码.


此外,您的数字仅显示2/3减少;-)无论如何,我怀疑这不是主要瓶颈,并强烈建议使用可行的算法 - 无论是MD5还是SHA1或其他.MD5的计算成本仅比SHA1略低(它在一个数量级内),但实现可能是一个因素.如果需要,也可以对此运行基准测试......