algorithm - 将 48 位 key 散列为 16 位值

标签 algorithm math hash integer mac-address

我正在使用接收非常小的数据包的设备。设备由 48 位 key 唯一标识。当设备收到一个单独的数据包时,它需要读取数据包并确定该数据包是否针对该设备。听起来很简单,但数据包有足够的空间只容纳一个 16 位 key 。

无法更改通信协议(protocol)。我无法使用多个数据包或数据包中的任何其他字段。基本上我需要将这个 48 位标识符存储在 16 位字段中。显然,任何解决方案都会发生冲突。

我正在考虑发送原始 key 的低 16 位或对其进行哈希处理。 在最大程度地减少碰撞的同时执行此操作的最佳方法是什么?

PS:实际上看起来原始 key 的前三个字节总是相同的,所以这个问题只是将 24 位 key 插入 16 位 key ,但仍然很糟糕。

PPS:碰撞不是灾难性的。该设备可以恢复,但价格昂贵。

最佳答案

向制造商询问生成此数字的任何模式。很可能这 24 位中的某些位标识了生产批处理或世界上要运送到的地区,使它们成为被修剪掉的主要候选对象。

在请求中明确表示您知道并接受他们可以随时更改编号政策,恕不另行通知。这应该使他们更有可能提供信息。

关于algorithm - 将 48 位 key 散列为 16 位值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20232942/

相关文章:

python - 为什么 IF 条件一直被评估为 True

javascript - 减去10的最大倍数

c - netbsd 版本的 openssh 支持 "diffie-hellman-group-exchange-sha256",但不支持 Mac 的 SHA256

c++ - 循环 vector - 寻找最小可能的 'cost' (来自 CodeChef)

algorithm - 给定连续的单词流,删除重复项

c++ - 优化的图像卷积算法

c++ - 当我使用带有整数的 C++ 数学函数时,我应该担心精度吗?

jquery - 在 jQuery 中使用 window.location.hash

php - php 中的 python 函数

java - 确定给定数字 N 是否可以成为具有所有 3 个整数边的直角三角形的斜边的算法