为了账号安全,请及时绑定邮箱和手机立即绑定

更好地理解 Kademlia 的 XOR Integer Metric

更好地理解 Kademlia 的 XOR Integer Metric

Go
撒科打诨 2023-05-08 14:36:02
我试图更好地掌握 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[:])

}


查看完整回答
反对 回复 2023-05-08
  • 1 回答
  • 0 关注
  • 70 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信