go - 更好地理解 Kademlia 的 XOR Integer Metric

标签 go distributed p2p xor kademlia

我试图更好地掌握 Kademlia 的 XOR 距离度量,因此我编写了一个小的虚拟程序来尝试更好地理解。我在这里也没有使用 160 位数字作为我的 key ,而是使用某个用户标识符的 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
}

最佳答案

这是不正确的,因为

您必须使用 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[:])
}

关于go - 更好地理解 Kademlia 的 XOR Integer Metric,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53166625/

相关文章:

security - 一种用于分布式或分散式声誉/信任的算法

iPhone(位于蜂窝 NAT 后面)与服务器的点对点互联网连接

go - 第一个 HTTP 请求总是很慢

go - 如何在 go text/template 中使用 .Key

distributed - 分布式系统中的投票协议(protocol)

java - Java 有现成的时钟同步解决方案吗?

go - 如何将参数传递给dlv调试

go - 为什么反射要与 UNEXPORTED Struct 和 Unexported Fields 一起使用?

Java分布式架构和版本控制

synchronization - 使用 BitTorrent 在多个站点之间进行文件复制/同步