我正在寻找创建一些数据对象的 32 位散列。由于我不想编写自己的散列函数并且 md5 可用,我目前的方法是使用 md5 散列的前 32 位(即前 8 个十六进制数字)。这可以接受吗?
换句话说,md5 散列的前 32 位是否与任何其他子串一样“随机”? 或者有什么理由我更喜欢最后 32 位?或者也许将四个 32 位子字符串异或在一起?
一些先发制人的澄清:
- 这些哈希不需要是加密安全的。
- 我不关心 md5 的性能——它的速度足以满足我的需要。
- 这些散列只需要足够“随机”,以至于很少发生冲突。
- 在这个系统中,项目的数量不应超过 10,000(实际上它可能不会达到那么高的一半)。所以在最坏的情况下,遇到任何冲突的概率应该是大约 1%(假设找到了一个足够“随机”的散列)。