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

标签 php performance md5 hash

我们在代码的许多部分中使用 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/

相关文章:

linux - 检索在线资源的 md5 哈希值

php - 替换所有不在 html 标签中的引号

php - jquery post() 不以动态形式工作

c# - 泛型与数组列表

.net - SQL Server 查询仅在第一次运行时确实很慢

md5 - MD5密码哈希函数输出在所有编程语言中都一样吗?

php - 将 JSON 值分配给来自 Google Maps API 查询的 PHP 数组

php - 谷歌 API OAuth 2.0 CURL 返回 "Required parameter is missing: grant_type"

javascript - 更快的 JavaScript 处理

ruby - 在 Ruby 中将唯一的种子字符串转换为随机但确定的浮点值