哈希(Hash)和哈希树(Merkle tree)

2023-10-27

 

        哈希函数(英语:Hash function)又称散列函数,是一种从任何一种数据中创建小的数字“指纹”的方法。散列函数把消息或数据压缩成摘要,使得数据量变小,将数据的格式固定下来。该函数将数据打乱混合,重新创建一个叫做散列值/哈希值(hash values,hash codes,hash sums,或hashes)的指纹。散列值通常用一个短的随机字母和数字组成的字符串来代表。好的散列函数在输入域中很少出现散列冲突。

        散列函数都有如下一个基本特性:如果两个散列值是不相同的(根据同一函数),那么这两个散列值的原始输入也是不相同的。这个特性是散列函数具有确定性的结果,具有这种性质的散列函数称为单向散列函数。但另一方面,散列函数的输入和输出不是唯一对应关系的,如果两个散列值相同,两个输入值很可能是相同的,但也可能不同,这种情况称为“散列碰撞(collision)”,这通常是两个不同长度的输入值,刻意计算出相同的输出值。

 

 

 

        输入一些数据计算出散列值,然后部分改变输入值,一个具有强混淆特性的散列函数会产生一个完全不同的散列值。这一特点在区块链中被使用。要生成当前区块的加密散列,需要使用上一个区块的加密散列值。更改一个区块,下一个区块的散列值就需要重新计算,并导致之后所有的区块都需要重新计算一次。因此,一个个区块就这样串联起来,形成了一条链。这也就是区块链当中“链”的由来。

        一个设计优秀的加密散列函数是一个“单向”操作:对于给定的散列值,没有实用的方法可以计算出一个原始输入,也就是说很难伪造。利用这一特点,发信人通过将原消息和散列值一起发送,可保证数据的真实和完整。

        哈希树(hash tree;Merkle tree),在密码学及计算机科学中是一种树形数据结构,每个叶节点均以数据块的哈希作为标签,而除了叶节点以外的节点则以其子节点标签的加密哈希作为标签 。哈希树能够高效、安全地验证大型数据结构的内容。哈希树的概念由瑞夫·墨克于 1979 年申请专利,故亦称墨克树(Merkle tree)。

 

 

        哈希树的顶部为顶部哈希(top hash),亦称根哈希(root hash)或主哈希(master hash)。只要任一叶节点有变化,根哈希都会变。在比特币区块里,所有交易都按照Merkle Tree的格式组织起来,再跟区块头里的hashMerkleTreeRoot对应起来,就可以保证本区块交易信息的不可篡改。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

哈希(Hash)和哈希树(Merkle tree) 的相关文章

  • 给定一个二叉树, 找到该树中两个指定节点p和q(数值唯一)的最近公共祖先

    递归思想 判断p和q是否分别根结点的左右两侧 如果在左右两侧那么直接返回根结点即可 不失一般性 假设p和q分别均在根结点的左侧 那么按照分治的思想 此时继续往左子树找即可 问题规模已经缩小 那么依旧还是上面的操作划分 故可以采用递归的思想
  • 算法-经典趣题-马踏棋盘(又称骑士周游)

    本文为joshua317原创文章 转载请注明 转载自joshua317博客 算法 经典趣题 马踏棋盘 又称骑士周游 joshua317的博客 一 问题 马踏棋盘问题 又称骑士漫步 它是一个非常有趣的智力问题 马踏棋盘问题的大意如下 国际象棋
  • solr之lucene全文检索的基本原理

    一 总论 根据http lucene apache org java docs index html定义 Lucene是一个高效的 基于Java的全文检索库 所以在了解Lucene之前要费一番工夫了解一下全文检索 那么什么叫做全文检索呢 这
  • 字符串题目:设计 Goal 解析器

    文章目录 题目 标题和出处 难度 题目描述 要求 示例 数据范围 解法 思路和算法 代码 复杂度分析 题目 标题和出处 标题 设计 Goal 解析器 出处 1678 设计 Goal 解析器 难度 2 级 题目描述 要求 请你设计一个可以解释
  • 程序员常用九大算法(二分查找(非递归)、分治、动态规划、KMP、贪心、普里姆、克鲁斯卡尔、迪杰斯特拉、弗洛伊德算法)

    程序员常用九大算法 1 二分查找 非递归 2 分治算法 3 动态规划算法 4 KMP算法 5 贪心算法 6 普里姆算法 7 克鲁斯卡尔算法 8 迪杰斯特拉算法 9 弗洛伊德算法 1 二分查找 非递归 就是不使用递归的二分查找 这里不做介绍
  • 数组中子数组和为固定值的题目汇总

    开头附件一部分数组去重的知识 C 中数组 Vector中去除重复元素 unique函数是一个去重函数 去除相邻中的重复元素 只留一个 其中 最关键的是 并不是删除并不是把重复的元素删除 而是全部放倒数组的后面 因为 unique只是去除 相
  • 输出二叉树的所有路径

    给你一个二叉树的根节点 root 按 任意顺序 返回所有从根节点到叶子节点的路径 叶子节点 是指没有子节点的节点 输入 root 1 2 3 null 5 输出 1 gt 2 gt 5 1 gt 3 解法一 深度优先搜索 递归 迭代也可以实
  • 分治法时间复杂度求解:主定理、代换法和递归树

    分治策略 分解 将原问题划分成形式相同的子问题 规模可以不等 对半或2 3对1 3的划分 解决 对于子问题的解决 很明显 采用的是递归求解的方式 如果子问题足够小了 就停止递归 直接求解 合并 将子问题的解合并成原问题的解 这里引出了一个如
  • 分治法( Divide and Conquer)

    分治法也称为分解法 分治策略等 分治法算法思想如下 1 将一个问题划分为同一类型的若干子问题 子问题最好规模相同 2 对这些子问题求解 一般使用递归方法 但在问题规模足够小时 有时也会利用另一个算法 3 有必要的话 合并这些子问题的解 以得
  • 数据结构和算法(双向链表和单向环型链表-Josephu问题)

    为什么会有双向链表 单链表的缺点分析 单向链表 查找的方向只能是一个方向 而双向链表可以向前或者向后查找 单向链表不能自我删除 需要考辅助节点 而双向链表 则可以自我删除 双向链表的结构 每个节点都有next和pre指针 next指向后 p
  • 数据结构和算法(4)-----栈

    一 栈的一个实际需求 例如 请输入一个表达式计算式 7 2 2 5 1 5 3 3 点击计算 如下图 请问 计算机底层是如何运算得到结果的 注意不是简单的把算式列出运算 因为我们看这个算式 7 2 2 5 但是计算机怎么理解这个算式的 对计
  • 面试类链表题目汇总

    注意 红色区域为错误点 黄色区域为注意点 重点 1 链表末未添加尾节点 因为插入一个尾节点 如果为空的话就需要修改头结点 多以 void AddToTail ListNode pHead int value ListNode pAdd ne
  • (十三):图

    1 图的基本介绍 1 1为什么要有图 前面我们学到了线性表和树 线性表局限于直接前驱和一个直接后继结点的关系 树也只能有一个直接前驱也就是父节点 当我们需要多对多关系时候 就需要图 1 2图的举例说明 图是一种数据结构 其中结点可以具有零个
  • LeetCode:Binary Tree Preorder Traversal(非递归方法前序遍历二叉树)

    Given a binary tree return the preorder traversal of its nodes values For example Given binary tree 1 2 3 1 2 3 return 1
  • 数据结构---填数字

    填数字 JAVA实现 C 实现 JAVA实现 public static int myFindABC int total 0 int sum 0 HashMap
  • 哈希表查找——成功和不成功时的平均查找长度

    哈希表查找 成功和不成功时的平均查找长度 以下求解过程是按照 计算机统考的计算方法 不同的老师 教材在 处理冲突 上可能会有不同的方法 所以最主要的是掌握原理即可 对于考研的朋友最好掌握统考真题的解题方法 题目 例子 2010年全国硕士研究
  • DFS 刷题记录(laptop part)(2022.2.10)

    namespace matchstick my int isDividedby4 vector
  • 数据结构---红包分配算法

    红包分配算法 错误解法 二倍均值法 JAVA实现 线段切割法 确定每一条子线段的长度 JAVA实现 问题如下 所有人抢到的金额之和要等于红包金额 不能多也不能少 每个人至少抢到1分钱 要保证红包拆分的金额尽可能分布均衡 不要出现两极分化太严
  • 栈的讲解及实现(图解+代码/C语言)

    今天为大家分享的是栈的模拟实现 本文主要讲解如何以数组的形式模拟实现 同时给出链表模拟实现栈的代码 目录 图解栈的结构 数组模拟栈的分步实现 创建并初始化 入栈 检测栈是否为空 出栈 获取栈顶元素 获取栈内有效元素个数 销毁栈 链表模拟实现
  • 基于C语言实现的文件压缩算法-哈夫曼编码

    哈夫曼编码 是一种数据压缩算法 通常用于无损数据压缩 该算法是由 David A Huffman在麻省理工学院就读理学博士 Doctor of Science 的时候发明的 这位大佬在1952年发表了相关的一篇论文A Method for

随机推荐

  • Ubuntu环境下配置Tomcat开机自动启动

    背景 项目部署好后 每次重启虚拟机后 需手动启动Tomcat 为了减少重复操作 特研究怎么设置Tomcat开机自动启动 实践了几种方法 下边的方法靠谱有效 以供参考 检查安装环境配置路径 JDK根目录 usr lib jvm java 1
  • Pandas提速与时间序列处理

    Pandas提速与时间序列处理 在数据分析和处理的领域中 Pandas是一个强大而受欢迎的Python库 它为我们提供了高效的数据结构和数据分析工具 可以轻松处理大规模数据集 本文将重点介绍如何通过优化Pandas代码来提高运算效率 并展示
  • Nginx的配置大全(经测试可用)

    文章目录 一 Nginx下载安装 二 Nginx启动 三 Nginx配置 四 Nginx日志管理 五 Nginx实现视频点播 六 Nginx实现直播 七 Nginx实现视频回放 八 Nginx实现负载均衡 九 Nginx实现IP黑名单 十
  • 软件工程概述-架构师(三)

    软件工程概述 老版 软件开发生命周期 软件定义时期 包括 可行性研究和详细需求分析过程 任务是软件工程必需完成的目标 具有可行问题分析 可行性研究 需求分析等 软件开发时期 软件的 设计与实现 可分为概要设计 详细设计 编码 测试等 软件运
  • Ler(一) stdlib.h,stdio.h,string.h头文件

    一 定位不同 1 stdlib h是standard library标准库头文件 定位在通用工具函数 2 stdio h是standard input output标准输入输出头文件 定位在标准的输入输出工具函数 二 封装函数不同 1 st
  • kitti中stereo的disparity的gt数据的读取和使用

    首先 kitti中disparity的gt的值是uint16的 https blog csdn net chenxicx1992 article details 44784559 这个博客是讲解如何读取存储的是uint16型数据的图片 我也
  • ETCD 详解

    一 ETCD简介 etcd是一个Go言编写的分布式 高可用的一致性键值存储系统 用于提供可靠的分布式键值存储 配置共享和服务发现等功能 具有以下特点 简单 易使用 基于HTTP JSON的API让你用curl就可以轻松使用 易部署 使用Go
  • JSON详解

    JSON的全称是 JavaScript Object Notation 意思是JavaScript对象表示法 它是一种基于文本 独立于语言的轻量级数据交换格式 XML也是一种数据交换格式 为什么没有选择XML呢 因为XML虽然可以作为跨平台
  • PC++:矩阵乘法操作

    实验要求 编写矩阵乘法代码实现 并编译执行 对代码进行执行时间分析 比较不同实现的效率差异 实验步骤 1 完成GEMM示例 并修改输入数据大小 首先 建立一个test cpp文件 利用以下代码 来源 https github com pen
  • canvas 画布 arcTo 方法的理解与使用

    参考文档 https codeplayer vip p j7scu arcTo x1 y1 x2 y2 radius x1 y1 理解为端点1 x2 y2 理解为端点2 radius 半径是基于断点2画的一个弧
  • 【uniapp之h5 微信小程序 app 开发项目结构图 思维导图及注意事项】

    uniapp之h5 微信小程序 app 开发项目结构图 思维导图及注意事项
  • python-网络安全编程第三天(正则表达式)

    python 正则表达式 正则表达式本身是一种小型的 高度专业化的编程语言 而在python中 通过内嵌集成re模块 程序媛们可以直接调用来实现正则匹配 正则表达式模式被编译成一系列的字节码 然后由用C编写的匹配引擎执行 用法 match
  • go.DB 富集分析子集 go子集 offspring children多层次结构go

    安装archr包 别处复制 libPaths c home data t040413 R x86 64 pc linux gnu library 4 2 home data t040413 R yll usr local lib R sit
  • Interceptor的基本介绍和使用preHandle、postHandle与afterCompletion

    目录 preHandle postHandle afterCompletion 项目测试代码 项目测试 preHandle 调用时间 Controller方法处理之前 执行顺序 链式Intercepter情况下 Intercepter按照声
  • 通用单目标跟踪综述《Handcrafted and Deep Trackers: A Review of Recent Object Tracking Approaches》

    近年来 视觉目标跟踪成为一个非常活跃的研究领域 每年都会提出越来越多的跟踪算法 跟踪在人机交互 自动驾驶汽车 机器人 监控和安全等各种现实问题中有着广泛的应用 本文将回顾跟踪领域的最新的趋势和进展 并基于特征提取方法评估了不同跟踪算法的鲁棒
  • pickle读文件解码问题

    运行 Revisiting Semi Supervised Learning with Graph Embeddings 的代码 kimiyoung planetoid 其中用 pickle 读数据文件出现问题 它本身是用 python 2
  • Nacos修改配置文件如何使其立即生效

    目录 前言 实现方案 方案一 方案二 注意事项 前言 当配置信息发生变动时 修改实时生效 无需要重新重启服务 就能够自动感知相应的变化 并将新的变化统一发送到相应程序上 快速响应变化 要实现这一目的 需要通过下面两种方案来实现 实现方案 方
  • 渗透测试工具ZAP入门教程(3)-渗透测试扫描流程

    使用ZAP对网站进行渗透测试流程如下 ZAP启动浏览器 输入URL 点击启动浏览器 在打开的浏览器登录要扫描的网站 在打开的浏览器上进行需要测试的流程操作 ZAP会记录操作过程中的HTTP请求 spider爬虫 点击Spider Start
  • 永恒话题,编程语言的选择

    当编程初学者要选择编程语言时 可以像选择一家餐厅一样 下面是一些建议 像选择美食一样选择编程语言 想象你是个美食家 编程语言就是菜单上的各种美食 先思考你的目标和口味偏好 是想开发网页 那就选择前端语言如HTML CSS和JavaScrip
  • 哈希(Hash)和哈希树(Merkle tree)

    哈希函数 英语 Hash function 又称散列函数 是一种从任何一种数据中创建小的数字 指纹 的方法 散列函数把消息或数据压缩成摘要 使得数据量变小 将数据的格式固定下来 该函数将数据打乱混合 重新创建一个叫做散列值 哈希值 hash