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

什么是数据结构里的 Merkle 树

时间:2023-11-17 09:57:19浏览次数:38  
标签: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://www.cnblogs.com/sap-jerry/p/17837922.html

相关文章

  • 到底什么是Linux?快进来学习!
    相信大家对Linux并不陌生吧?Linux是一种计算机系统,属于基础中的基础,就和我们熟知的Windows一样,都是系统。它是现今最流行和最实用的计算机操作系统,它区别于后台、算法、大数据、前端、测试方向,需要程序员对Linux系统拥有更多的感悟和技术。在Linux操作系统中,所有被操作系统管理的......
  • 易语言为什么能实现中文开发软件?什么原理实现的
    易语言(EPL,EasyProgrammingLanguage)是一种独特的编程语言,它支持中文编程,这意味着程序员可以使用中文关键字和语法结构来编写代码。这种语言的设计主要针对中文使用者,旨在降低编程的入门门槛,特别是对那些英语不是母语的人。易语言之所以能实现中文开发软件,主要基于以下原理和特......
  • 什么是马尔可夫过程?
    假设有一个过程: 状态S1->状态S22 ->状态S33->状态S如果上面的过程加一个条件,下一个状态只与当前状态有关,那么可以理解为这个过程就是马尔可夫过程说明:当前状态S1到下一个状态S22只是其中一个路径,到下一状态还有可能是S21. S23等等。。。依此类推大脑可以想象有......
  • 汇编语言基础语法,然后什么是汇编语法,比喻一下
    汇编语言是一种低级编程语言,它非常接近于计算机硬件的操作语言。了解汇编语言的基础语法首先需要了解它的核心概念和基本结构。汇编语言的基本概念操作码(Opcode):这是指示计算机执行特定操作的命令,如加法、减法等。操作数(Operand):这是操作码作用的对象,可以是数值、内存地址或者寄......
  • Fastapi框架:Starlette,Pydantic 与 FastAPI 框架是什么关系?
    【一】介绍Starlette是个什么项目;IDE开发时Python3.5+版本的"typehints"的好处:简短、直观和标准的Python类型声明;介绍Pydantic包,FastAPI项目的开发为什么要使用Pydantic【二】Starlette【1】介绍Starlette是一种轻量级的ASGI框架/工具包,是构建高性能A......
  • 编写一段 ABAP 代码构造 merklet 树
    *&---------------------------------------------------------------------**&ReportZBLOCKTREE*&---------------------------------------------------------------------**&*&---------------------------------------------------------------......
  • 数据结构C语言之线性表
    发现更多计算机知识,欢迎访问Cr不是铬的个人网站1.1线性表的定义线性表是具有相同特性的数据元素的一个有限序列对应的逻辑结构图形:从线性表的定义中可以看出它的特性:(1)有穷性:一个线性表中的元素个数是有限的(2)一致性:一个线性表中所有元素的性质相同,即数据类型相同(3)序列性:各......
  • 为什么要用JWT,JWT与Seeion区别
    一、为什么使用JWTHTTP是无状态的,开发人员需要基于HTTP来模拟实现状态的保存。经典的实现用户登录的做法是用Session,用户登录验证成功后,服务端生成SessionId。服务端会将SessionId与登录的用户信息的对应关系保存在服务器内存中,同时将SessionId返回给浏览器端,sessionId一般存储在......
  • ip不稳定什么原因引起
    IP不稳定是指IP地址在使用过程中出现频繁断开、连接异常或访问速度不稳定等现象。这种情况可能由多种原因引起,下面我们将对其中一些常见的原因进行分析。 网络线路问题 网络线路故障是导致IP不稳定的主要原因之一。网络线路可能因为老化、损坏或接触不良等原因,导致数据传输出......
  • 恒创科技:什么是美国服务器,有哪些优势,适用于什么场景?
    ​在互联网发展的过程中,服务器扮演着至关重要的角色。而美国作为全球信息技术的中心,其服务器在全球范围内受到广泛关注。美国服务器是指在美国本土机房搭建并运行的服务器。其拥有带宽大、优质硬件、售后运维好、位置优越、数据安全性高以及免备案、价格便宜等诸多优势......