我試圖更好地掌握 Kademlia 的 XOR 距離度量,因此我編寫了一個小的虛擬程序來嘗試更好地理解。我在這里也沒有使用 160 位數字作為我的密鑰,而是使用某個用戶標識符的 sha256 哈希。這是我的異或距離函數。這或多或少是正確的嗎?我對每個字節進行異或運算——將其附加到緩沖區rawBytes并將該字節緩沖區轉換為整數。func XorDistance(node string, otherNode string) uint64 { var rawBytes [32]byte for i := 0; i < 32; i++ { rawBytes[i] = node[i] ^ otherNode[i] } distance, _ := binary.Uvarint(rawBytes[:]) return distance}
1 回答

交互式愛情
TA貢獻1712條經驗 獲得超3個贊
這是不正確的,因為
binary.Uvarint()
只能解碼64位以內的數字,而你的rawBytes是256位“varint”編碼基本上與原始字節不兼容。
你必須使用math/big
這個包來使用。這是我對您的代碼段的修改版本:
func xorDistance(node string, otherNode string) *big.Int {
? ? var rawBytes [32]byte
? ? for i := 0; i < 32; i++ {
? ? ? ? rawBytes[i] = node[i] ^ otherNode[i]
? ? }
? ? return big.NewInt(0).SetBytes(rawBytes[:])
}
- 1 回答
- 0 關注
- 118 瀏覽
添加回答
舉報
0/150
提交
取消