大家好,这里是链客区块链技术问答社区,今天为大家讲一讲区块链中的hash算法,希望对学习中的小伙伴有所帮助~也希望大家多多关注我们~感谢大家
区块链技术是一系列技术的结合,建立新的技术架构,hash算法是很重要的一块,如果理解不当的地方请指点更正。
Hash算法将任意长度的二进制值映射成为固定长度并且较短的二进制值,这个就成为哈希值。其是一段数据唯一且紧凑的数值表示形式。找到同一值的不同的输入,在计算机上是不可能的,数据的哈希值可以检验数据的完整性,一般用于快速查找和加密算法。
Hash算法是一种单向的加密,一个明文加密称密文,不可推逆,只有加密过程没有解密过程。目前常用的hash算法由MD5。SHA系列算法。
解释到这里,可能会联想到,hash算法中key在计算后如果出现了同一位置,冲突的产生,这里简单说下几种冲突处理。
1.拉链法:这种方法可以完全避免冲突,将所有关键字为同义词的节点连接在同一个单链表中。
2.多哈希法:设计两种以上的hash函数,避免冲突。
3.开放地址法:开放地址法有一个公式:Hi=(H(key)+di)MODmi=1,2,…,k(k<=m-1),其中,m为哈希表的表长。di是产生冲突的时候的增量序列。如果di值可能为1,2,3,…m-1,称线性探测再散列。如果di取1,则每次冲突之后,向后移动1个位置.如果di取值可能为1,-1,4,-4,9,-9,16,-16,…kk,-kk(k<=m/2),称二次探测再散列。如果di取值可能为伪随机数列。称伪随机探测再散列。
结合区块链,在区块链中很多地方都用到了hash函数:
1.区块链中节点的地址、公钥、私钥的计算。以地址为例:公钥经过一次SHA256计算,再进行一次RIPEMD160计算,得到一个公钥哈希,添加版本信息,再来两次SHA256运算、取前4比特字节,放到哈希公钥加版本信息后,再经过base58编码,最终得到地址。
2.merkletree:是数据结构中的一种树结构,可以是二叉树,也可以是多叉树,他和数据结构中树的特点几乎一致,和普通树不同的是:merkletree上的叶节点存放hash计算后的hash值,非叶节点是其对应的子节点串联的字符串的hash值。用于区块头和SPV认证中。
3.比特币中的挖矿,工作量证明,计算的其实就是一个nonce,当这个随机数和其他散列过的数据合并时,产生一个比规定目标小值。挖矿也可以理解一种快速不可逆的计算。SHA256(SHA256(version+prev_hash+merkle_root+ntime+nbits+x))<TARGET。
4.比特币中的bloomfilter布隆过滤器,布隆过滤器基于hash函数的快速查找。解决了客户端检索的问题,原理是Bloomfilter可以快速判断出某检索值一定不存在于某个指定的集合,从而可以过滤掉大量无关数据,减少客户端不必要的下载量。
简单介绍了HASH算法和区块链中用到的HASH算法,区块链是多个技术的结合,会出现一种新的技术结构,Hash算法和加密技术为区块链的自证信用和安全控制提供了基础。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。