ale*_*.98 1 .net c# sha1 dht endianness
有人可以帮我理解160位(SHA-1)哈希中最重要的字节是什么吗?
我有一个C#代码调用加密库来计算数据流中的哈希码.结果我得到一个20字节的C#数组.然后我从另一个数据流计算另一个哈希码,然后我需要按升序放置哈希码.
现在,我正在努力了解如何比较它们.显然我需要从另一个中减去一个,然后检查结果是否为负,正或零.从技术上讲,我有2个20字节的数组,如果我们从内存角度看一下开头的最低有效字节(较低的内存地址)和最后的最高有效字节(较高的内存地址).另一方面,从人类阅读的角度来看它们,最重要的字节在开头,最不重要的是在结尾,如果我没有弄错,这个顺序用于比较GUID.当然,如果我们使用一种或另一种方法,它将给我们不同的顺序.哪种方式被认为是比较哈希码的正确或传统方式?在我们的情况下,这一点尤为重要,因为我们正在考虑实现一个应该与现有的哈希表兼容的分布式哈希表.
您应该将初始哈希视为字节而不是数字.如果您正在尝试为索引查找命令它们,请使用最简单的顺序来实现 - 这里没有通用的"正确"或"常规",真的.
如果你有一些特定的哈希表,你想要"兼容"(甚至不确定那意味着什么),你应该看看对哈希表进行排序的方法,假设它甚至是相关的.如果您有多个表需要兼容,您可能会发现需要对不同的表使用不同的顺序.
鉴于评论,您正在尝试使用Kademlia,基于此文档将哈希视为大端数字:
Kademlia在将密钥(包括nodeID)解释为bigendian数字时遵循Pastry.这意味着表示键的字节数组中的低位字节是最重要的字节,因此如果两个键靠近在一起,则距离数组中的低位字节将为零.
这只是对字节的任意解释 - 只要每个人都使用相同的解释,它就会起作用......但如果每个人都决定将它们解释为小端数字,它也会起作用.
归档时间: |
|
查看次数: |
200 次 |
最近记录: |