哈希(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) 的相关文章

  • 逆序建链表

    1 建立一个新的结点 2 让这个结点的next指向头结点的next 3 让头结点的next指向该结点 include
  • 回溯算法 解题思路

    文章目录 算法介绍 回溯算法能解决的问题 解题模板 1 组合问题 2 N皇后问题 算法介绍 回溯法 Back Tracking Method 探索与回溯法 是一种选优搜索法 又称为试探法 按选优条件向前搜索 以达到目标 但当探索到某一步时
  • 图的深度优先搜索(dfs)

    图的遍历 即是对结点的访问 一个图有那么多个结点 如何遍历这些结点 需要特定策略 一般有两种访问策略 1 深度优先遍历 2 广度优先遍历 图的深度优先搜索 Depth First Search 指的是在搜索时 如果遇到一个结点既有子结点 又
  • java希尔排序

    public class ShellSort public static void main String args int a 9 8 7 0 1 3 2 10 5 12 7 0 15 int n a length for int add
  • 红黑树和AVL树的比较分析

    定义 AVL树全称是平衡二叉搜索树 相比于红黑树 他是一种高度平衡的二叉搜索树 所有节点的左右子树高度差不超过1 红黑树是一种弱平衡的二叉搜索树 它只要求部分达到平衡 其保证最长路径最多是最短路径的2倍 增删查比较 插入 就插入节点导致树失
  • 基于C++的栈的两种实现(数组和链表)

    栈 概述 基本操作 用数组实现栈 用链表实现栈 测试 概述 栈是一种只能在表的顶端进行插入和删除运算的线性表 其主要特点是后进先出 LIFO 或先进后出 FILO 该数据结构的示意图如下 基本操作 函数名 用途 bool empty 判断栈
  • 数据结构和算法(2)-----队列

    一 基本介绍 队列是一个有序列表 可以用数组或链表来实现 遵循先入先出的原则 即先存入队列的数据 要先取出 后存入队列的数据 要后取出 示意图 二 数组模拟队列 思路 队列本身是有序列表 若使用数组的结构来存储队列的数据 则队列数组的声明如
  • 如何实现概率性事件

    游戏中经常会遇到概率性的问题 比如装备升级的成功率 合成宝石的成功率 洗装备时出现随机属性条数的概率等 这些概率性事件具体是怎么实现的呢 在网上看了一些相关的文章 总结一下 首先需要了解两个函数rand 和srand 下面是百科里面的解释
  • 数据结构和算法(1):开始

    算法概述 所谓算法 即特定计算模型下 旨在解决特定问题的指令序列 输入 待处理的信息 问题 输出 经处理的信息 答案 正确性 的确可以解决指定的问题 确定性 任一算法都可以描述为一个由基本操作组成的序列 可行性 每一基本操作都可实现 且在常
  • 数据结构和算法(查找算法[ 二分、插值 ]、哈希表构成、普通二叉树操作、线索化和遍历[ 前、中、后 ] 序)

    常用查找算法 顺序 线性 查找 二分查找 折半查找 插值查找 顺序查找 按照顺序 遍历数组 比对数字 如果找到 返回下标 由于比较简单 不再介绍 二分查找 二分查找思路分析 需要查找的数组必须是有序的 否则查找没有意义 二分查找代码实现 p
  • 数据结构---希尔排序

    希尔排序 逐步折半增量 JAVA实现 Hibbard增量 Sedgewick增量 总结 对原始数组预处理 然后使用插入排序 满足 数组元素较少和 数组大部分元素有序俩个条件 逐步折半增量 逐步分组进行粗调 再进行直接插入排序的思想 就是希尔
  • 算法(1)---八大排序算法

    一 选择排序 定义 从待排序的数据中 按指定的规则选出某一个元素 再依规定交换位置后达到排序的目的 核心思想 从全部序列中选取最小的 与第0个元素交换 然后从第1个元素往后找出最小的 与第一个元素交换 再从第2个元素往后选取最小的 与第二个
  • 排序算法——交换排序(快排*)和归并排序

    上篇文章介绍了插入排序和选择排序 详见https mp csdn net postedit 97524495 3交换排序 所谓交换 就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置 交换排序的特点是 将键值较大的记 录向序
  • 详解八大排序算法-附动图和源码(插入,希尔,选择,堆排序,冒泡,快速,归并,计数)

    目录 一 排序的概念及应用 1 排序的概念 2 排序的应用 3 常用的排序算法 二 排序算法的实现 1 插入排序 1 1直接插入排序 1 2希尔排序 缩小增量排序 2 选择排序 2 1直接选择排序 2 2堆排序 3 比较排序 3 1冒泡排序
  • 数据结构和算法之插入排序

    一 插入排序 插入排序是一种简单直观的排序算法 它的原理是通过构建有序序列 对于未排序数据 在已排序序列中从后向前扫描 找到相应位置并插入 mermaid svg v2YbPqchr8qWCPvn font family trebuchet
  • java七大排序——7_归并排序

    归并排序 将数组分为2块 再到每一小块再分为两块 直到最后一个元素为一块 然后进行有序数组合并 最终合并为一个有序数组 代码实现 public static void mergeSorts int array mergeSortsInter
  • 数据结构---二叉查找树(二叉搜索树)

    二叉查找树 特性 插入 删除 待删除节点没有子节点 待删除节点有一个子节点 待删除节点有两个子节点 JAVA实现 缺陷 二叉查找树 二叉排序树 在二叉树的基础上 增加了 如果左子树不为空 则左子树上所有节点的值都小于根节点的值 如果右子树不
  • 栈的讲解及实现(图解+代码/C语言)

    今天为大家分享的是栈的模拟实现 本文主要讲解如何以数组的形式模拟实现 同时给出链表模拟实现栈的代码 目录 图解栈的结构 数组模拟栈的分步实现 创建并初始化 入栈 检测栈是否为空 出栈 获取栈顶元素 获取栈内有效元素个数 销毁栈 链表模拟实现
  • leetcode:93. 复原 IP 地址

    复原 IP 地址 中等 1 4K 相关企业 有效 IP 地址 正好由四个整数 每个整数位于 0 到 255 之间组成 且不能含有前导 0 整数之间用 分隔 例如 0 1 2 201 和 192 168 1 1 是 有效 IP 地址 但是 0
  • 深入理解左倾红黑树 | 京东物流技术团队

    平衡二叉搜索树 平衡二叉搜索树 Balanced Binary Search Tree 的每个节点的左右子树高度差不超过 1 它可以在 O logn 时间复杂度内完成插入 查找和删除操作 最早被提出的自平衡二叉搜索树是 AVL 树 AVL

随机推荐

  • 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