区块链中的哈希函数

2023-11-02

小白如何秒懂区块链中的哈希计算
当我在区块链的学习过程中,发现有一个词像幽灵一样反复出现,“哈希”,英文写作“HASH”。
那位说“拉稀”同学你给我出去!!
这个“哈希”据说是来源于密码学的一个函数,尝试搜一搜,论文出来一堆一堆的,不是横式就是竖式,不是表格就是图片,还有一堆看不懂得xyzabc。大哥,我就是想了解一下区块链的基础知识,给我弄那么难干啥呀?!我最长的密码就是123456,复杂一点的就是654321,最复杂的时候在最后加个a,你给我写的那么复杂明显感觉脑力被榨干,仅有的脑细胞成批成批的死亡!为了让和我一样的小白同学了解这点,我就勉为其难,努力用傻瓜式的语言讲解一下哈希计算,不求最准确但求最简单最易懂。下面我们开始:
#一、什么是哈希算法

1、定义:哈希算法是将任意长度的字符串变换为固定长度的字符串。

从这里可以看出,可以理解为给**“哈希运算”输入一串数字,它会输出一串数字**。
如果我们自己定义 “增一算法”,那么输入1,就输出2;输入100就输出101。
如果我我们自己定义“变大写算法”,那么输入“abc”输出“ABC”。
呵呵,先别打我啊!这确实就只是一个函数的概念。

2、特点:

这个哈希算法和我的“增一算法”和“变大写算法”相比有什么特点呢?
1)确定性,算得快:咋算结果都一样,算起来效率高。
2)不可逆:就是知道输出推不出输入的值。
3)结果不可测:就是输入变一点,结果天翻地覆毫无规律。
总之,这个哈希运算就是个黑箱,是加密的好帮手!你说“11111”,它给你加密成“b0baee9d279d34fa1dfd71aadb908c3f”,你说“11112”它给你弄成“afcb7a2f1c158286b48062cd885a9866”。反正输入和输出一个天上一个地下,即使输入相关但两个输出毫不相关。
#二、哈希运算在区块链中的使用

1、数据加密

交易数据是通过哈希运算进行加密,并把相应的哈希值写入区块头。如下图所示,一个区块头包含了上一个区块的hash值,还包含下一个区块的hash值。
1)、识别区块数据是否被篡改:区块链的哈希值能够唯一而精准地标识一个区块,区块链中任意节点通过简单的哈希计算都可以获得这个区块的哈希值,计算出的哈希值没有变化也就意味着区块链中的信息没有被篡改。
2)、把各个区块串联成区块链:每个区块都包含上一个区块的哈希值和下一个区块的值,就相当于通过上一个区块的哈希值挂钩到上一个区块尾,通过下一个区块的哈希值挂钩到下一个区块链的头,就自然而然形成一个链式结构的区块链。

2、加密交易地址及哈希

在上图的区块头中,有一个Merkle root(默克尔根)的哈希值,它是用来做什么的呢?
首先了解啥叫Merkle root? 它就是个二叉树结构的根。啥叫二叉树?啥叫根?看看下面的图就知道了。一分二,二分四,四分八可以一直分下去就叫二叉树。根就是最上面的节点就叫 根。
这个根的数据是怎么来的呢?是把一个区块中的每笔交易的哈希值得出后,再两两哈希值再哈希,再哈希,再哈希,直到最顶层的数值。
这么哈希了半天,搞什么事情?有啥作用呢?
1)、快速定位每笔交易:由于交易在存储上是线性存储,定位到某笔交易会需要遍历,效率低时间慢,通过这样的二叉树可以快速定位到想要找的交易。
举个不恰当的例子:怎么找到0-100之间的一个任意整数?(假设答案是88)那比较好的一个方法就是问:1、比50大还是小?2、比75大还是小?3、比88大还是小? 仅仅通过几个问题就可以快速定位到答案。
2)、核实交易数据是否被篡改:从交易到每个二叉树的哈希值,有任何一个数字有变化都会导致Merkle root值的变化。同时,如果有错误发生的情况,也可以快速定位错误的地方。

3、挖矿

在我们的区块头中有个参数叫随机数Nonce,寻找这个随机数的过程就叫做“挖矿”!网络上任何一台机器只要找到一个合适的数字填到自己的这个区块的Nonce位置,使得区块头这6个字段(80个字节)的数据的哈希值的哈希值以18个以上的0开头,谁就找到了“挖到了那个金子”!既然我们没有办法事先写好一个满足18个0的数字然后反推Nounce,唯一的做法就是从0开始一个一个的尝试,看结果是不是满足要求,不满足就再试下一个,直到找到。
找这个数字是弄啥呢?做这个有什么作用呢?
1)、公平的找到计算能力最强的计算机:这个有点像我这里有个沙子,再告诉你它也那一个沙滩的中的一粒相同,你把相同的那粒找出来一样。那可行的办法就是把每一粒都拿起来都比较一下!那么比较速度最快的那个人是最有可能先早到那个沙子。这就是所谓的“工作量证明pow”,你先找到这个沙子,我就认为你比较的次数最多,干的工作最多。
2)、动态调整难度:比特币为了保证10分钟出一个区块,就会每2016个块(2周)的时间计算一下找到这个nonce数字的难度,如果这2016个块平均时间低于10分钟则调高难度,如高于十分钟则调低难度。这样,不管全网的挖矿算力是怎么变化,都可以保证10分钟的算出这个随机数nonce。
#三、哈希运算有哪些?
说了这么多哈希运算,好像哈希运算就是一种似的,其实不是!作为密码学中的哈希运算在不断的发展中衍生出很多流派。我看了”满头包”还是觉得内在机理也太复杂了,暂时罗列如下,小白们有印象知道是怎么回事就好。
从下表中也可以看得出,哈希运算也在不断的发展中,有着各种各样的算法,各种不同的应用也在灵活应用着单个或者多个算法。比特币系统中,哈希运算基本都是使用的SHA256算法,而莱特币是使用SCRYPT算法,夸克币(Quark)达世币(DASH)是把很多算法一层层串联上使用,Heavycoin(HAV)却又是把一下算法并联起来,各取部分混起来使用。以太坊的POW阶段使用ETHASH算法,ZCASH使用EQUIHASH。
需要说明的是,哈希运算的各种算法都是在不断升级完善中,而各种币种使用的算法也并非一成不变,也在不断地优化中。
总结:哈希运算在区块链的各个项目中都有着广泛的应用,我们以比特币为例就能看到在数据加密、交易数据定位、挖矿等等各个方面都有着极其重要的作用。而哈希运算作为加密学的一门方向不断的发展和延伸,身为普通小白的我们,想理解区块链的一些基础概念,了解到这个层面也已经足够。

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

区块链中的哈希函数 的相关文章

随机推荐

  • install cuda in a new Ubuntu 20.4 LTS for Geforce rtx 2080Ti

    Install cuda 11 6 2 1 download cuda 11 6 2 CUDA Toolkit Archive NVIDIA Developer 2 install cuda toolkits reference to In
  • 前端甘特图组件开发(一)

    背景 工作中需要在网页上实现甘特图 以展示进度数据 通过网上调研相关项目 找到一款 dhtmlx gantt 组件 在低程度上满足项目需求 但在部分定制功能 如时间轴自定义 编辑弹窗样式风格等 并不能完全满足项目需求 此外 使用此类开源项目
  • Rumor CodeForces - 893C(并查集基本操作:维护连通块最值)

    题目链接 PS 这题也可以用dfs搜连通块 一遍搜一遍记录连通块的最值 AC代码 include
  • 在浏览器中使用VLC插件实现播放RTSP流视频

    在浏览器中使用VLC插件实现播放RTSP流视频 一 安装VLC插件 二 编写测试html文件 三 生成一个测试用RTSP流视频 四 在浏览器中播放RTSP流视频 五 VLC插件知识扩展 1 VLC插件就是axvlc dll 2 如何手动安装
  • 【转】PL/SQL Developer 设置快捷键

    转自 http www cnblogs com SingleCat archive 2010 06 16 1759010 html 1 登录后默认自动选中My Objects 默认情况下 PLSQL Developer登录后 Brower里
  • LeetCode 刷题 14. 最长公共前缀

    LeetCode 刷题 14 最长公共前缀 题目链接点此 class Solution def longestCommonPrefix self strs List str gt str strs sort re for i j in zi
  • 制造业企业为什么都纷纷上MES系统?

    什么是MES系统 MES管理系统是一套面向制造企业车间执行层的生产信息化管理系统 它可以为企业打造一个扎实 可靠 全面 可行的制造协同管理平台 作为企业车间信息化管理技术的系统 制造执行系统MES在实现生产过程的自动化 智能化 网络化等方面
  • 用IDEA测试代码覆盖度

    IDEA自身就带有代码覆盖度测试工具 无需下载或安装其他任何工具 以下我们以P1 Graph为例讲一讲怎么用IDEA测试代码覆盖度 1 右键单击P1 Graph 2 点击Run Tests in P1 Graph 3 运行测试结束后再次右键
  • 出现windows启动服务失败(无法从命令行或调试器启动,需要安装InstallUtil.exe)的解决办法...

    两种方法1 从命令行安装2 选择项目 视图 自定义操作 然后将 安装 提交 回滚 卸载分别加入自定义操作 注意InstallClass属性为true 转载于 https www cnblogs com lovezhaolei p 38178
  • simclrv2框架

    机器学习 Machine Learning Huge Self Supervised Models are Strong Semi Supervised learners 巨大的自我监督模型是强大的半监督学习者 目录 Table of Co
  • 斐波那契(Fibonacci)查找算法

    一 黄金分割和斐波那契数列 二者的关系 黄金分割 这个词经常出现在一些建筑物的设计 黄金分割的近似值是0 618 斐波那契数列又称黄金比例数列 指的是这样的数列 1 1 2 3 5 8 13 21 34 这个数列从第三项开始 每一项都等于前
  • WebSocket协议介绍

    文章目录 前言 一 WebSocket是什么 二 WebSocket出现之前的实时技术 三 WebSocket应用场景 四 WebSocket协议栈 五 WebSocket与HTTP的区别 六 WebSocket握手过程 七 WebSock
  • 使用win10专业版自带远程桌面公司内网电脑

    在现代社会中 各类电子硬件已经遍布我们身边 除了应用在个人娱乐场景的消费类电子产品外 各项工作也离不开电脑的帮助 特别是涉及到数据采集和储存的场景 如安保监控 自动化流程等等 更是离不开电脑 在一般情况下 这些数据采集和记录的电脑会自成一个
  • OpenCV4Android开发之旅(一)----OpenCV2.4简介及 app通过Java接口调用OpenCV的示例

    开发环境 windows ADT Bundle CDT OpenCV 2 4 4 android sdk 一 OpenCV2 4简介 OpenCV近年来发展迅猛 随着Android智能终端的发展 越来越多的传统科研平台都转向Android移
  • WIn10防火墙入站规则设置无效

    在将自己的笔记本纳入监控系统监控 通过SNMP进行监控 的过程中 遇到了服务无法开通的问题 笔记本是Win10的系统 并且是需要跨网段提供服务的 开通SNMP服务 首先要开通SNMP服务 安装 控制面板 gt 程序 gt 启用或关闭Wind
  • 成功编译RenderingPluginExample53的cpp项目的步骤

    备忘 unity中调用d3d功能的示例项目 两个方面的配置 1 为了在项目中能够找到d3d12 h d3d11 h d3d9 h等 做如下操作 在项目属性中 VC 目录 包含目录 中添加 C Program Files x86 Window
  • pclpy安装及安装过程中踩的坑

    由于学习需要不得不安装pclpy 一直踩坑 找了一下午才把问题解决了 特此记录 希望各位童鞋能够节约时间 1 创建虚拟环境 选择python版本 目前支持两个版本python 3 6以及python 3 7 windows系统 如果pyth
  • Python快速入门,看这一篇就够了

    大家好 我是老三 我最近在看一些人工智能相关的东西 大部分相关的框架 都是用Pyhon写的 老三会用Python 但谈不上多熟练 最近准备拿Python作为自己的第二语言 那么这期我们来一起快速梳理一下Python基础 起步 Python简
  • MODIS数据的简介和下载(二)——MODIS数据下载方式(FTP)

    前一篇我们已经介绍了MODIS数据的简介 参数以及相关的典型应用 这一篇我们来介绍下MODIS数据的下载方式 当然这边主要是介绍国外网站的下载方式 国内网站的普遍是在地理空间数据云和遥感集市下载 国外网站 NASA官网 下载方式主要介绍两种
  • 区块链中的哈希函数

    小白如何秒懂区块链中的哈希计算 当我在区块链的学习过程中 发现有一个词像幽灵一样反复出现 哈希 英文写作 HASH 那位说 拉稀 同学你给我出去 这个 哈希 据说是来源于密码学的一个函数 尝试搜一搜 论文出来一堆一堆的 不是横式就是竖式 不