非加密用途的最快哈希?
我基本上是在准备要放入数据库的短语,它们可能格式不正确,所以我想存储它们的短散列(我将简单地比较它们是否存在,因此散列是理想的).
I'm essentially preparing phrases to be put into the database, they may be malformed so I want to store a short hash of them instead (I will be simply comparing if they exist or not, so hash is ideal).
我认为 MD5 在 100,000 多个请求上相当慢,所以我想知道散列短语的最佳方法是什么,也许推出我自己的散列函数或使用 hash('md4', '...'
最终会更快吗?
I assume MD5 is fairly slow on 100,000+ requests so I wanted to know what would be the best method to hash the phrases, maybe rolling out my own hash function or using hash('md4', '...'
would be faster in the end?
我知道 MySQL 有 MD5(),所以这会在查询端增加一点速度,但也许 MySQL 中还有一个更快的散列函数,我不知道它是否适用于 PHP..
I know MySQL has MD5(), so that would complement a bit of speed on the query end, but maybe there's further a faster hashing function in MySQL I don't know about that would work with PHP..
推荐答案
CRC32 非常快,并且有一个函数:http://www.php.net/manual/en/function.crc32.php
CRC32 is pretty fast and there's a function for it: http://www.php.net/manual/en/function.crc32.php
但是您应该知道 CRC32 比 MD5 甚至 SHA-1 哈希具有更多的冲突,这仅仅是因为长度减少了(32 位与 128 位和 160 位相比).但是,如果您只想检查存储的字符串是否已损坏,那么使用 CRC32 就可以了.
But you should be aware that CRC32 will have more collisions than MD5 or even SHA-1 hashes, simply because of the reduced length (32 bits compared to 128 bits respectively 160 bits). But if you just want to check whether a stored string is corrupted, you'll be fine with CRC32.
相关文章