我正在尝试为10或16个字节的字符串创建哈希。这些字符串是以太网mac地址+ ip地址(6 + 4字节)或只是ipv6 ip(16字节)。
我最好还是保留蛋糕并吃掉它。绝对最小碰撞将是优先事项。散列长度必须小于16个字节并且相当快。 <为O(n ^ 2)
我知道应该从哪里开始吗?
答案 0 :(得分:7)
也许我错过了一些东西,但如果你的哈希数据不再是你的哈希值,那么显而易见的候选者就是使用数据本身作为哈希填充,比如说,如果短于16个字节则填充零:我怀疑什么在简单性或碰撞方面可以击败它。
答案 1 :(得分:3)
这个问题与Fast String Hashing Algorithm with low collision rates with 32 bit integer 重复。如果您关注速度,请从那里开始参考。 (MurmurHash似乎是共识的选择。)
如果性能不是一个大问题,只需获取一个SHA-1库并使用20个字节输出中的前16个。这对使用库的代码来说是微不足道的,并且可以抵抗冲突。
[编辑]
正如John Flatness在评论中指出的那样,MD5也适合该法案。我怀疑现在找到一个SHA-1库比MD5更容易(因为几年前MD5被破解了),但无论你有什么方便,都可以,因为这不是一个加密应用程序。