我正在寻找一个哈希函数,我可以使用它为使用 GSM 调制解调器或以太网连接连接到我们网络的设备提供统一的唯一 ID。
因此,对于任何给定的设备,我都有一个IMEI 号码或一个硬编码的MAC 地址,可用于生成哈希。
在过去的几个小时里,我一直在研究散列函数,阅读我可能想要使用的不同的非加密和加密散列。我的重点是性能上的低冲突,因为不会经常计算哈希。
我的领跑者是 MD5、FNV-1a、MurmurHash2、Hsieh 和 DJB。
无论我使用什么哈希,都必须用 C 语言实现,并且将在带有微型处理器的微控制器上使用。
我知道为您的需要选择一个好的散列函数的诀窍是知道您将提供什么样的输入。
我问这个问题的原因是我脑海中突然出现了一个想法,即 IMEI 和 MAC 都有有限的长度和范围,所以也许存在一个相当简单的哈希函数可以覆盖两者的全部集合并且不会发生冲突。(因此,一个完美的哈希函数)
一个 IMEI 号码是 15 个十进制数字(十六进制是 12-13 个字节?),一个 MAC 地址是 6 个字节。仔细考虑我认为您不会在两组输入数字之间发生冲突,但如果这是错误的,请随时纠正我。如果你这样做了,你能做些什么来阻止它吗?在其中一组中添加一些种子?
我在正确的轨道上吗?是否可以为这些组合集找到完美的哈希函数?
谢谢!
更新
感谢您的回答和评论。我最终使用了恒等函数;)作为我的哈希函数,然后还使用了掩码,因为数字集之间可能存在重叠。
IMEI、IMEISV 和 MAC 都适合 6.5 个字节或更少,所以我将我的值存储在 7 个字节中,然后对第一个字节进行按位或运算,并使用基于数字来自哪个集合的掩码,以确保它们是在所有集合中都是独一无二的。