我试图更好地掌握Kademlia的XOR距离度量,所以我编写了一个小的虚拟程序来尝试更好地理解。这里我也不使用160位数字作为我的密钥,而是使用某些用户标识符的sha256散列。
这是我的xor距离函数。这或多或少是正确的吗?我是XORing每个字节--将其附加到缓冲区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
}发布于 2018-11-06 11:16:19
这不正确,因为
binary.Uvarint()只能在64位内解码数字,您的rawBytes是256位。您必须使用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[:])
}https://stackoverflow.com/questions/53166625
复制相似问题