算术运算的 160 位哈希的最高有效字节是什么?
What is the most significant byte of 160 bit hash for arithmetic operations?
有人可以帮助我了解 160 位 (SHA-1) 哈希的最高有效字节是什么吗?
我有一个 C# 代码,它调用加密库从数据流中计算哈希码。结果我得到一个 20 字节的 C# 数组。然后我从另一个数据流计算另一个哈希码,然后我需要将哈希码按升序排列。
现在,我正在尝试了解如何正确比较它们。显然我需要从另一个中减去一个,然后检查结果是负数、正数还是零。从技术上讲,我有 2 个 20 字节的数组,如果我们从内存的角度来看,最低有效字节在开头(较低的内存地址),最高有效字节在末尾(较高的内存地址)。另一方面,从人类阅读的角度来看,最重要的字节在开头,最不重要的字节在结尾,如果我没记错的话,这个顺序用于比较 GUID。当然,如果我们使用一种或另一种方法,它会给我们不同的顺序。哪种方法被认为是比较哈希码的正确或常规方法?这在我们的案例中尤为重要,因为我们正在考虑实施分布式哈希 table,它应该与现有哈希兼容。
您应该将初始散列视为字节,而不是数字。如果您尝试对它们进行排序以进行索引查找,请使用最容易实现的任何排序 - 这里没有通用的 "right" 或 "conventional",真的。
如果你有一些 specific 散列 table 你想 "compatible" 与(甚至不知道那是什么意思)你应该看到假设哈希 table 是相关的,采用什么方法来排序该哈希 table。如果您有多个需要兼容的 table,您可能会发现需要对不同的 table 使用不同的排序。
鉴于评论,您正在尝试使用 Kademlia,它基于 this document 将哈希视为大端数字:
Kademlia follows Pastry in interpreting keys (including nodeIDs) as bigendian numbers. This means that the low order byte in the byte array representing the key is the most significant byte and so if two keys are close together then the low order bytes in the distance array will be zero.
这只是对字节的任意解释 - 只要每个人都使用相同的解释,它就会起作用......但如果每个人都决定将它们解释为小端数字,它也会起作用。
您可以使用 SequenceEqual 来比较 Byte 数组,查看以下链接以了解详细信息:
How to compare two arrays of bytes
Comparing two byte arrays in .NET
有人可以帮助我了解 160 位 (SHA-1) 哈希的最高有效字节是什么吗?
我有一个 C# 代码,它调用加密库从数据流中计算哈希码。结果我得到一个 20 字节的 C# 数组。然后我从另一个数据流计算另一个哈希码,然后我需要将哈希码按升序排列。
现在,我正在尝试了解如何正确比较它们。显然我需要从另一个中减去一个,然后检查结果是负数、正数还是零。从技术上讲,我有 2 个 20 字节的数组,如果我们从内存的角度来看,最低有效字节在开头(较低的内存地址),最高有效字节在末尾(较高的内存地址)。另一方面,从人类阅读的角度来看,最重要的字节在开头,最不重要的字节在结尾,如果我没记错的话,这个顺序用于比较 GUID。当然,如果我们使用一种或另一种方法,它会给我们不同的顺序。哪种方法被认为是比较哈希码的正确或常规方法?这在我们的案例中尤为重要,因为我们正在考虑实施分布式哈希 table,它应该与现有哈希兼容。
您应该将初始散列视为字节,而不是数字。如果您尝试对它们进行排序以进行索引查找,请使用最容易实现的任何排序 - 这里没有通用的 "right" 或 "conventional",真的。
如果你有一些 specific 散列 table 你想 "compatible" 与(甚至不知道那是什么意思)你应该看到假设哈希 table 是相关的,采用什么方法来排序该哈希 table。如果您有多个需要兼容的 table,您可能会发现需要对不同的 table 使用不同的排序。
鉴于评论,您正在尝试使用 Kademlia,它基于 this document 将哈希视为大端数字:
Kademlia follows Pastry in interpreting keys (including nodeIDs) as bigendian numbers. This means that the low order byte in the byte array representing the key is the most significant byte and so if two keys are close together then the low order bytes in the distance array will be zero.
这只是对字节的任意解释 - 只要每个人都使用相同的解释,它就会起作用......但如果每个人都决定将它们解释为小端数字,它也会起作用。
您可以使用 SequenceEqual 来比较 Byte 数组,查看以下链接以了解详细信息:
How to compare two arrays of bytes
Comparing two byte arrays in .NET