首页 > 其他分享 >什么是数据结构里的 Merkle 树

什么是数据结构里的 Merkle 树

时间:2023-11-10 20:31:36浏览次数:42  
标签:hash H3 H12 H4 节点 Merkle 数据结构 什么

Merkle 树,也被称为 "hash tree",是一种二叉树的数据结构。这种树的每个节点都是基于其子节点的一种特殊形式的 hash。具体来说,叶节点的 hash 是由存储在那里的数据块(例如文件或文件的部分)生成的,而非叶节点的 hash 是由其子节点的 hash 生成的。如果 Merkle 树只有一个节点(也就是根节点),那么该节点的 hash 就是所有数据的 hash。

Merkle 树的主要优点是它可以用来有效地和安全地验证大型数据结构的内容。因为每个节点的 hash 都依赖于其子节点,所以如果数据的任何部分发生更改,这将导致 hash 的变化,从而可以轻松地在树中的高层级检测到。这使得 Merkle 树在分布式系统和区块链技术中特别有用,因为它们需要在无法信任所有参与者的情况下验证数据的一致性。

让我们通过一个例子来详细说明这个过程。假设我们有四个数据块,我们将它们称为 D1D2D3D4。首先,我们为每个数据块创建一个叶节点,并计算每个数据块的 hash,我们将这些 hash 命名为 H1H2H3H4。然后,我们为这些叶节点创建父节点。每个父节点的 hash 是其子节点 hash 的 hash。例如,左边的父节点的 hash(我们将其称为 H12)是 H1H2 的连接的 hash。同样,右边的父节点的 hash(我们将其称为 H34)是 H3H4 的连接的 hash。

在这个例子中,我们的 Merkle 树看起来像这样:

         H12-34
         /    \
     H12      H34
    /  \      /  \
  H1   H2   H3   H4
 /     /     /    \
D1   D2   D3   D4

H12-34 是根节点,它是整个数据结构的 hash。如果任何 Dx 发生更改,那么相应的 Hx 也会更改,这将导致父节点和根节点的 hash 更改。

现在,假设我们想要验证 D4 的完整性,但我们没有整个 Merkle 树,只有 H12-34。在这种情况下,我们需要 D4H3、和 H12。我们可以用 D4 计算 H4,然后用 H3H4 计算 H34,最后用 H12H34 计算 H12-34

标签:hash,H3,H12,H4,节点,Merkle,数据结构,什么
From: https://blog.51cto.com/jerrywangsap/8308074

相关文章

  • 免root修改手机imei的技术原理是什么?如何实现的?hook吗
    在过去,修改手机IMEI(InternationalMobileEquipmentIdentity)通常需要Root权限,这给用户带来了一些不便,也存在一定的安全风险。然而,近年来,一些技术爱好者提出了一种免Root修改手机IMEI的方法,通过技术手段实现这一功能,而无需获取系统的超级用户权限。本文将深入探讨这种技术的原理和......
  • 请问以下两次检测对象constructor是否拥有属性名1的结果分别是什么?
    请问以下两次检测对象constructor是否拥有属性名1的结果分别是什么?1inObject(1.0).constructor;Number[1]=123;1inObject(1.0).constructor;false、true实际上Object(1.0)就是将数字“1.0”封装成它对应的包装类的一个对象实例比如Number(1.0),所以目的是为了检测1是否在Nu......
  • PyQt5-QLabel控件是什么?方法有哪些?具体如何使用?
    (QLabel控件是什么?方法有哪些?具体如何使用?)1QLabel控件作用?QLabel控件用于显示不可编辑的文本或图片,也用于设置超链接、富文本,以及作为其他控件的;QLabel控件是PyQt5是一个非常常用又非常基础的一个控件。2QLabel源码源码路径:PyQt5\QtWidgets\QLabel.py部分源码:cla......
  • 【虹科干货】TWAMP:什么是双向主动测量协议?
    TWAMP(双向主动测量协议)是什么?它在网络性能测量中有什么作用?如果您对IP网络中设备之间的性能问题感兴趣,或者想了解TWAMP与OWAMP之间的区别,以及TWAMP测试的好处。 一、TWAMP是什么?TWAMP代表“双向主动测量协议”,如RFC5357中所述,它是一种用于测量IP网络中任意两个设备或端点之间的网......
  • 数据结构之线性表
    线性表之顺序存储:1sqlist.h2#ifndef_SQLIST_H3#define_SQLIST_H45#defineMAX_SIZE66typedefstruct7{8intdata[MAX_SIZE];9intlast;10}sqlist,*sqlink;1112voidcreatList(sqlinkL);//建空表13intgetLength......
  • Sql server基础使用(六):补充零碎的一些东西(想到什么就补充,未完待续~~)
    对所学Sqlserver知识进行一下记录总结,某些用法之间还可以关联使用,欢迎补充和讨论。本人比较懒,结果的截图暂时就先不传了,什么时候想起来再说吧~~在写存储过程之前,先补充一些比较零碎的东西,有些在存储过程中会用到。就想到什么写什么吧,有时间就补充~~未完待续~~1.定义变量(我一般......
  • 编程思维—为什么缺乏逻辑的人往往看不到问题的本质?
    为什么缺乏逻辑的人往往看不到问题的本质?柏拉图柏拉图《理想国》中洞穴寓言:在洞穴隐喻中,柏拉图设想一群人居住在洞穴中,他们从出生起就被束缚在洞穴里,只能看到投射到洞穴墙壁上的外界的影子,而无法看到真实的世界。某一天,一个人挣脱了束缚,走出了洞穴,他先是感到阳光刺眼,随后看到了......
  • Go语言中切片和数组有什么区别
    在Go语言中,数组的结构非常简单,它由两个部分组成:数据类型(DataType):数组中包含的元素的数据类型是固定的,所有元素必须具有相同的数据类型。这意味着一个数组可以包含整数、浮点数、字符串或其他数据类型,但所有元素的类型必须一致。长度(Length):数组的长度是在声明时指定的,它表示数组中......
  • 为什么OpenAPI是未来企业数字化转型的决定性因素?
    本文分享自华为云开发者联盟公众号《为什么OpenAPI是未来企业数字化转型的决定性因素?》。随着数字经济不断发展升级,数据互通、万物互联正在逐步成为IT产业发展的主旋律,企业数字化转型也变得愈发紧迫。越来越多的企业都在数字化转型过程中寻求降本增效、加大创新力度、开展生态合......
  • 北京前端五年经验问些什么?
    这一天,我瘫坐在办公室的椅子上,回想这五年的一事无成,钱也没赚到,技术也没学到,最近投了简历去面试,我一定要把握住,这是我此生仅有的机会了。穿好格子衫,带上假发,出发了。路上的植发广告格外亮眼,玩了会儿手机终于到了。某大型互联网公司,跟前台说了一下是面试的,然后让我填个表,填完去一个小......