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

如何组合 sha 哈希值?

如何组合 sha 哈希值?

Go
喵喵时光机 2023-07-31 15:36:21
我已经订购了数据块,每个数据块都用 sha256 单独进行了哈希处理。我想将这些哈希值组合成一个 sha256 哈希值。我应该将哈希值作为数据输入 sha256 中,还是从数学/加密货币的角度来看,还有其他更好的方法吗?这似乎是一个微不足道的问题,但当涉及到加密货币时,直觉往往是错误的。编辑:这样做的目的是形成一种区块链,尽管这个术语现在已经被过度使用了。这是出于完整性目的,而不是工作证明。这个想法是对跟随者节点上的块进行散列,将散列合并到集群领导者上的散列中,以获得代表整个链的散列,然后将其添加到要散列的新块中。这有点奇怪,因为它是一个分布式系统,所以“全链哈希”通常有点过时,所以我知道当在该节点创建块时,代表该链的哈希是什么,正如该节点所知,但可能有在该特定哈希上“挂接到链上”的几个块,然后将它们排序并组合到系统哈希中,最终将其添加到新块中。我正在使用 Go,如果这很重要的话。
查看完整描述

3 回答

?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

如果您尝试重新创建已分割为块(例如大小为 10MB)的大型负载(例如 1GB 文件)的哈希值,则需要对整个集合计算哈希值(MD5、SHA-256 等)。因此,使用此示例,您无法添加100 个分块哈希来重新创建原始文件的哈希。然而...

您可以为每个块发送 2 个值:

  • 单个块的哈希值(就像您现在所做的那样)

  • 中间哈希状态,当您的服务扫描文件以创建每个块有效负载时:在块的开头和结尾

当块流入时,可以验证块末尾的哈希状态的接缝与块开头的N哈希状态的接缝是否匹配N+1

最终块的最终哈希状态将是整个有效负载的哈希。

为什么会这样呢?因为可以在接收到文件块时实时计算哈希值,而不是作为一个单独的耗时过程,在接收到所有文件块之后。

查看完整回答
反对 回复 2023-07-31
?
慕的地10843

TA贡献1785条经验 获得超8个赞

编辑:这样做的目的是形成一种区块链,尽管这个术语现在已经被过度使用了。这是出于完整性目的,而不是工作证明。这个想法是对跟随者节点上的块进行散列,将散列合并到集群领导者上的散列中,以获得代表整个链的散列,然后将其添加到要散列的新块中。

这看起来像merkle tree

Merkle 树是一种基于哈希的数据结构,是哈希列表的推广。它是一种树结构,其中每个叶节点是数据块的哈希值,每个非叶节点是其子节点的哈希值。通常,Merkle 树的分支因子为 2,这意味着每个节点最多有 2 个子节点。

Merkle 树在分布式系统中用于高效的数据验证。它们非常高效,因为它们使用散列而不是完整文件。哈希是对比实际文件本身小得多的文件进行编码的方法。目前,它们的主要用途是在点对点网络中,例如 Tor、比特币和 Git。

查看完整回答
反对 回复 2023-07-31
?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

尝试将已有的 SHA256 哈希值放入字符串中。然后使用 SHA256 或您选择的算法对该字符串进行哈希处理。或者,您可以将原始数据块串在一起,然后对其进行哈希处理。但我认为“散列哈希值”更快更干净。



查看完整回答
反对 回复 2023-07-31
  • 3 回答
  • 0 关注
  • 96 浏览
慕课专栏
更多

添加回答

举报

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