通过哈希算法检验大量数据(比如大量文件)的一致性时,常见的存储方案:

哈希列表(Hash List)

  • 原理:

    1. 计算每个数据的哈希值,保存为一个列表。
    2. 记录该列表的哈希值,用于检验整体的一致性。
  • 当发现整个 Hash List 的哈希值变化时,需要遍历检验每个数据的哈希值是否变化,从而找出变化的数据。时间复杂度为 O(n) 。

哈希链(Hash Chain)

  • 原理:

    1. 计算每个数据的哈希值。

    2. 将两个数据的哈希值组合,计算哈希值,再与下一个数据的哈希值组合,计算哈希值。以此类推,最后得到链尾的哈希值。

  • 如果任一节点的哈希值发生变化,则在哈希链中,其后所有节点的哈希值都会变化。

哈希树(Hash Tree)

:又称为默克尔树(Merkle Tree)

  • 原理:

    1. 计算每个数据的哈希值,保存为二叉树的叶子节点。

    2. 将二叉树中的节点两两组合计算哈希值,作为父节点的哈希值。以此类推,最后得到根节点的哈希值。

  • 从一个叶子节点到根节点的路径称为 Merkle 路径。

  • 当发现根节点的哈希值变化时,需要按二分法检验子孙节点的哈希值是否变化,从而找出变化的数据。时间复杂度为 O(logn) ,效率较高。

  • 假设哈希值存储在其它主机上,则采用 Hash List、Hash Chain 时,本机需要下载所有数据的哈希值用于遍历检验。采用 Merkle Tree 时,本机只需下载 Merkle 路径的相关节点的哈希值用于检验,开销更低。

哈希列表、哈希链、哈希树相关推荐

  1. C++安全方向(三)3.4 使用哈希列表验证文件的完整性

    操作步骤 1.哈希列表(Hash List) 2.读取文件,分块生成hash值 3.合并所有hash值再生成hash值 4.hash(hash(f1)-hash(f100)) 问题:为什么要用哈希列表 ...

  2. 区块链 01(简化后的区块包括父区块哈希值、数据、时间戳、哈希值这四个字段,区块的哈希值由父区块哈希值、数据、时间戳、3个字段拼接通过 哈希算法计算而成)

    """区块包括区块头和区块体两个部分.区块头由版本.父区块哈希值.数据.Merkle根.时间戳.目标难度. #Nonce值组成:区块体实际上可以包含任何内容,在比特币中包 ...

  3. 将区块链哈希转化为文字标题?IPSE哈希技术Hashlink解释

    前言 在人类历史中,有多次的转化改变了信息文明走向.第一个是人类语言的诞生.将人类从抽象的声音识别交流转化为具体的文字交流.第二个是二进制的广泛使用.二进制是电子信息技术的巨大进步,让机器用0和1就能 ...

  4. bootstracp实现树形列表_Java实现一致性哈希算法,并搭建环境测试其负载均衡特性...

    实现负载均衡是后端领域一个重要的话题,一致性哈希算法是实现服务器负载均衡的方法之一,你很可能已在一些远程服务框架中使用过它.下面我们尝试一下自己实现一致性哈希算法. 一. 简述一致性哈希算法 这里不详 ...

  5. 【数据结构】人名查询哈希表设计(链地址法)

    文章目录 核心代码 链表节点定义 链地址法处理冲突 查询函数 完整代码下载 核心代码 哈希表使用「链地址法」解决地址冲突的方式,其数据结构就采用 数组+链表 ,数组的每一个元素都是一个链表节点,当地址 ...

  6. 区块链 - 哈希(Hash)

    章节 区块链 – 介绍 区块链 – 发展历史 区块链 – 比特币 区块链 – 应用发展阶段 区块链 – 非对称加密 区块链 – 哈希(Hash) 区块链 – 挖矿 区块链 – 链接区块 区块链 – 工 ...

  7. 哈希函数在区块链中的应用

    哈希指针 除了保存结构体在内存中的位置还要保存结构体的哈希值. 好处:不只可以找到结构体的位置,还可以检测这个结构体的哈希值. 区块链和普通链表的主要区别就在于用哈希指针代替了普通的指针. 识别区块数 ...

  8. 【区块链】 区块链哈希算法

    哈希算法是什么 哈希算法是区块链中保证交易信息不被篡改的单向密码机制.哈希算法接收一段明文后,以一种不可逆的方式将其转化为一段长度较短.位数固定的散列数据.它有两个特点: 加密过程不可逆,意味着我们无 ...

  9. 基础数据结构(二):字典树、并查集、堆、哈希表、字符串的哈希方式、STL的常见容器及其接口

    文章目录 一.字典树Trie 1 原理 2 Trie字符串统计 3 [LeetCode 208. 实现 Trie (前缀树)](https://leetcode-cn.com/problems/imp ...

  10. 详解哈希数据结构,手写哈希表

    哈希表,终于姗姗来迟了. 本文系统讲解了哈希表数据结构的相关概念,并以HashMap为案例讲解一下它与普通哈希表的不同点,最后也手写一个简易的哈希表. 所以通过本文,我希望读者们能对哈希表有一个清楚的 ...

最新文章

  1. c++ opencv实现区域填充_使用OpenCV实现图像覆盖
  2. Excel导入sqlserver
  3. golang的time包:时间字符串和时间戳的相互转换
  4. 断点续传和下载原理分析
  5. 华为笔记本计算机在哪,新一代华为MateBook 的机会在哪里?
  6. 外媒吐槽:iPhone 13系列为史上力度最小的升级
  7. 汽车常识全面介绍 - 悬挂系统
  8. oracle定时删除归档日志
  9. html文字阴影效果图,CSS3 -- 文字阴影(text-shadow)
  10. word 的图片如何设置随意拖动或者说关闭任意拖动?
  11. Windows常见垃圾清理方式
  12. UIView的bounds、frame、center/position、anchorPoint的关系
  13. 如何在Word中用Visio画图
  14. html请求资源不可用,HTTP状态404 – 请求的资源(/)不可用
  15. dva脚手架创建的项目目录结构分析
  16. 为何 987654321/123456789 的值是 8.0000000729
  17. 化工机械基础试题及答案
  18. 【应用随机过程】07. 平稳过程
  19. 软件使用小技巧-Linux疑难杂症
  20. C# 改变DataGridView标题行的边框颜色

热门文章

  1. What is a hardlink and how to create one?
  2. 公网访问局域网家用nas
  3. 【信息学奥赛一本通 提高组】第三章 深搜的剪枝技巧
  4. 【实用】SAP成本组件分割价格取数逻辑
  5. kron matlab_MATLAB中kron命令有什么用途
  6. uniapp实现退出登录
  7. NOIp2014 提高组 Day1 T1 生活大爆炸版石头剪刀布
  8. linux同步苹果照片,有用iPhone的吗?Linux下怎么管理iPhone里的照片?
  9. Word 模板渲染引擎-Poi-tl
  10. SQL数据分析-淘宝用户行为