区块链中的HASH算法

想知道更多区块链技术知识,请百度【链客区块链技术问答社区】
链客,有问必答!!

区块链笔记-Hash算法
区块链技术是一系列技术的结合,建立新的技术架构,hash算法是很重要的一块,如果理解不当的地方请指点更正。
Hash算法将任意长度的二进制值映射成为固定长度并且较短的二进制值,这个就成为哈希值。其是一段数据唯一且紧凑的数值表示形式。找到同一值的不同的输入,在计算机上是不可能的,数据的哈希值可以检验数据的完整性,一般用于快速查找和加密算法。
Hash算法是一种单向的加密,一个明文加密称密文,不可推逆,只有加密过程没有解密过程。目前常用的hash算法由MD5。SHA系列算法。

解释到这里,可能会联想到,hash算法中key在计算后如果出现了同一位置,冲突的产生,这里简单说下几种冲突处理。
1.拉链法:这种方法可以完全避免冲突,将所有关键字为同义词的结点链接在同一个单链表中。
2.多哈希法:设计两种以上的hash函数,避免冲突。
3.开放地址法:开放地址法有一个公式:Hi=(H(key)+di) MOD m i=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计算,得到一个公钥哈希(20字节\160比特),添加版本信息,再来两次SHA256运算、取前4比特字节,放到哈希公钥加版本信息后,再经过base58编码,最终得到地址。
2.merkle tree:是数据结构中的一种树结构,可以是二叉树,也可以是多叉树,他和数据结构中树的特点几乎一致,和普通树不同的是:merkle tree上的叶节点存放hash计算后的hash值,非叶节点是其对应的子节点串联的字符串的hash值。用于区块头和SPV认证中。
3.比特币中的挖矿,工作量证明(pow),计算的其实就是一个nonce,当这个随机数和其他散列过的数据合并时,产生一个比规定目标小(target)值。挖矿也可以理解一种快速不可逆的计算。SHA256(SHA256(version + prev_hash + merkle_root + ntime + nbits + x )) < TARGET。
4.比特币中的bloom filter布隆过滤器,布隆过滤器基于hash函数的快速查找。解决了客户端检索的问题,原理是Bloom filter可以快速判断出某检索值一定不存在于某个指定的集合,从而可以过滤掉大量无关数据,减少客户端不必要的下载量。

简单介绍了HASH算法和区块链中用到的HASH算法,区块链是多个技术的结合,会出现一种新的技术结构,Hash算法和加密技术为区块链的自证信用和安全控制提供了基础。

那么今天就讲到这,也许有不对的地方,希望链客社区的大神可以指点迷津,让我的技术得到提高,感谢。

没有更多推荐了,返回首页