我基本上准备短语被放入数据库,他们可能是畸形的,所以我想要存储他们的一个短哈希代替(我将只是比较他们是否存在,所以哈希是理想的)。
我假设MD5在100,000+请求时相当慢,所以我想知道什么是哈希短语的最佳方法,也许是推出我自己的哈希函数或使用哈希('md4', '…“最终会更快吗?”
我知道MySQL有MD5(),所以这将在查询端补充一点速度,但也许在MySQL中还有一个更快的哈希函数,我不知道这将与PHP一起工作。
我基本上准备短语被放入数据库,他们可能是畸形的,所以我想要存储他们的一个短哈希代替(我将只是比较他们是否存在,所以哈希是理想的)。
我假设MD5在100,000+请求时相当慢,所以我想知道什么是哈希短语的最佳方法,也许是推出我自己的哈希函数或使用哈希('md4', '…“最终会更快吗?”
我知道MySQL有MD5(),所以这将在查询端补充一点速度,但也许在MySQL中还有一个更快的哈希函数,我不知道这将与PHP一起工作。
当前回答
如果你正在寻找快速和独特的,我推荐xxHash或使用较新的cpu的crc32c内置命令的东西,请参阅https://stackoverflow.com/a/11422479/32453。它还链接到更快的哈希如果你不太关心碰撞的可能性。
其他回答
CRC32速度更快,但安全性不如MD5和SHA1。MD5和SHA1在速度上没有太大的差别。
CRC32非常快,有一个函数:http://www.php.net/manual/en/function.crc32.php
但是你应该意识到CRC32会比MD5甚至SHA-1哈希有更多的冲突,仅仅是因为长度减少了(32位相比128位,分别是160位)。但如果你只是想检查存储的字符串是否损坏,使用CRC32也没问题。
Adler32在我的机器上运行得最好。 md5()比crc32()更快。
如果你正在寻找快速和独特的,我推荐xxHash或使用较新的cpu的crc32c内置命令的东西,请参阅https://stackoverflow.com/a/11422479/32453。它还链接到更快的哈希如果你不太关心碰撞的可能性。
+-------------------+---------+------+--------------+
| NAME | LOOPS | TIME | OP/S |
+-------------------+---------+------+--------------+
| sha1ShortString | 1638400 | 2.85 | 574,877.19 |
| md5ShortString | 2777680 | 4.11 | 675,834.55 |
| crc32ShortString | 3847980 | 3.61 | 1,065,922.44 |
| sha1MediumString | 602620 | 4.75 | 126,867.37 |
| md5MediumString | 884860 | 4.69 | 188,669.51 |
| crc32MediumString | 819200 | 4.85 | 168,907.22 |
| sha1LongString | 181800 | 4.95 | 36,727.27 |
| md5LongString | 281680 | 4.93 | 57,135.90 |
| crc32LongString | 226220 | 4.95 | 45,701.01 |
+-------------------+---------+------+--------------+
似乎crc32对于较小的消息(在本例中为26个字符)更快,而md5对于较长的消息(在本例中为>852个字符)。