3 回答
TA贡献1804条经验 获得超2个赞
如果您尝试重新创建已分割为块(例如大小为 10MB)的大型负载(例如 1GB 文件)的哈希值,则需要对整个集合计算哈希值(MD5、SHA-256 等)。因此,使用此示例,您无法添加100 个分块哈希来重新创建原始文件的哈希。然而...
您可以为每个块发送 2 个值:
单个块的哈希值(就像您现在所做的那样)
中间哈希状态,当您的服务扫描文件以创建每个块有效负载时:在块的开头和结尾
当块流入时,可以验证块末尾的哈希状态的接缝与块开头的N
哈希状态的接缝是否匹配N+1
。
最终块的最终哈希状态将是整个有效负载的哈希。
为什么会这样呢?因为可以在接收到文件块时实时计算哈希值,而不是作为一个单独的耗时过程,在接收到所有文件块之后。
TA贡献1785条经验 获得超8个赞
编辑:这样做的目的是形成一种区块链,尽管这个术语现在已经被过度使用了。这是出于完整性目的,而不是工作证明。这个想法是对跟随者节点上的块进行散列,将散列合并到集群领导者上的散列中,以获得代表整个链的散列,然后将其添加到要散列的新块中。
这看起来像merkle tree
Merkle 树是一种基于哈希的数据结构,是哈希列表的推广。它是一种树结构,其中每个叶节点是数据块的哈希值,每个非叶节点是其子节点的哈希值。通常,Merkle 树的分支因子为 2,这意味着每个节点最多有 2 个子节点。
Merkle 树在分布式系统中用于高效的数据验证。它们非常高效,因为它们使用散列而不是完整文件。哈希是对比实际文件本身小得多的文件进行编码的方法。目前,它们的主要用途是在点对点网络中,例如 Tor、比特币和 Git。
TA贡献1812条经验 获得超5个赞
尝试将已有的 SHA256 哈希值放入字符串中。然后使用 SHA256 或您选择的算法对该字符串进行哈希处理。或者,您可以将原始数据块串在一起,然后对其进行哈希处理。但我认为“散列哈希值”更快更干净。
- 3 回答
- 0 关注
- 147 浏览
添加回答
举报