繁体   English   中英

160位哈希算术运算的最高有效字节是多少?

[英]What is the most significant byte of 160 bit hash for arithmetic operations?

有人可以帮助我了解160位(SHA-1)哈希的最高有效字节是什么吗?

我有一个C#代码,该代码调用加密库以从数据流中计算哈希码。 结果,我得到一个20字节的C#数组。 然后,我从另一个数据流中计算另一个哈希码,然后需要将哈希码按升序排列。

现在,我试图了解如何正确比较它们。 显然我需要一个减去另一个,然后检查结果是否为负,正或零。 从技术上讲,我有2个20字节数组,如果从内存角度来看,它们的开头是最低有效字节(较低的内存地址),结尾处是最高有效字节(较高的内存地址)。 另一方面,从人类阅读的角度来看它们,最高有效字节在开头,最低有效字节在结尾,如果我没记错的话,此顺序用于比较GUID。 当然,如果我们使用一种或另一种方法,它将给我们不同的顺序。 哪种方法被认为是比较哈希码的正确或常规方法? 在我们的案例中,这尤其重要,因为我们正在考虑实现应该与现有哈希表兼容的分布式哈希表。

您应该将初始哈希视为字节,而不是数字。 如果您要对它们进行排序以进行索引查找,请使用最容易实现的任何排序-实际上,这里没有通用的“正确”或“常规”用途。

如果您有一些特定的哈希表,您想与之“兼容”(甚至不确定那是什么意思),那么您应该看看排序该哈希表所采用的方法,并假设它是相关的。 如果您有多个表需要与之兼容,则可能会发现需要对不同的表使用不同的排序。

给定评论,您正在尝试使用Kademlia, 该文件根据此文档将哈希视为大端数字:

Kademlia遵循Pastry将键(包括nodeID)解释为双端数字。 这意味着代表键的字节数组中的低位字节是最高有效字节,因此,如果两个键靠近在一起,则距离数组中的低位字节将为零。

那只是字节的任意解释-只要每个人都使用相同的解释,它就可以工作...但是,如果每个人都决定将它们解释为小端数字,它也将同样有效。

您可以使用SequenceEqual比较字节数组,检查以下链接以获取详细信息:

如何比较两个字节数组

.NET中的两个字节数组比较

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM