我正在處理接收非常小的數據包的設備。設備由48位密鑰唯一標識。當設備收到單個數據包時,它需要讀取數據包並確定數據包是否適用於該設備。聽起來很簡單,但數據包只有一個16位密鑰足夠的空間。將48位密鑰散列成16位值
通信協議無法更改。我無法使用數據包中的多個數據包或其他字段。基本上我需要將這個48位標識符存儲在一個16位的字段中。很明顯,任何解決方案都會發生衝突。
我正在考慮發送原始密鑰的低16位或散列它。 最大限度地減少碰撞的方法是什麼?
PS:實際上它看起來像原來的密鑰的前三個字節總是相同的,所以這個問題已經減少到推出一個16位密鑰的24位密鑰,但仍然非常糟糕。
PPS:碰撞不是災難性的。該設備可以恢復,但價格昂貴。
「*在最小化碰撞的情況下做到這一點的最佳方式是什麼?*」如果不知道所使用值的分配和分配情況,這是無法回答的。 – RBarryYoung
如果私鑰是隨機生成的,那麼對它們進行哈希處理將不會比獲取16位小節更少的衝突。如果問題很重要,最好不要弄錯鑰匙。 –
單個設備是否可編程?你可以配置設備來告訴它它的16位密鑰是什麼?如果您事先知道所有設備ID,則可以創建[最小完美散列](http://en.wikipedia.org/wiki/Perfect_hash_function#Minimal_perfect_hash_function)。但是,如果沒有某種方法告訴設備尋找特定的數據包號碼,碰撞的可能性將不爲零。 –