什么?区块链中的hash算法!施主,快扶老衲起来

hash算法有很多种。比如MD5、SHA1、SH2(SHA224、SHA256、SHA384和SHA512)、SH3、RIPEMD-160。

这些算法理论上都是不可逆的。但MD5算法被王晓云教授于2004年破解,所以它不是安全的。SHA1也被谷歌于2017年破解了,所以也是不安全的。

hash的本质:输入一个不定的字符串,然后输出一个固定长度的值。这个值就是该字符串的hash值。

hash算法除了上面列举的,还有很多种。在一些不是为了加密的,而仅仅是为了获取一个摘要值的场景,那些被破解的算法或者更快速的hash算法都是不错的选择,具体情况具体分析。

区块链中的哈希算法

有句名言:加密算法是区块链的骨骼

而hash算法则是区块链中用到最多的加密算法。

比如,通过hash算法对公钥进行hash,然后计算出来的钱包地址。区块头也要进行hash计算,还有计算交易事务的hash值。还有梅克尔树都是本身就是一颗hash树。

总之hash算法是贯穿了区块链系统的方方面面。

1、区块hash

区块hash指的是对一个区块的区块头进行hash,得到的hash值就是该区块的身份证号,也就是该区块的ID,该值是一个唯一确定的值。

而区块链的区块之间的串联就是通过每个区块的hash值来关联的,然后他们形成一个很长很长的链表结构,这也就是所谓的区块链。

假设现在有一个10000个区块组成的区块链。如果某个人起了歹心修改了第五十个区块。此时该区块的区块头的hash就发生了改变,这时候50号区块就无法和51号进行关联,对不上号了。你会发现要想改变区块链中的数据,你得把所有的区块的所有的hash重新计算一遍。如果区块链足够长,你篡改所有的区块链的代价是非常之大的,甚至是不可能的(这里说的比较谨慎和谦虚)。

2、merkle树

听到merkle你是不是有点头大。不用管。其实很简单。假如一个区块中有很多笔的交易数据。如果你对整个的交易集合进行hash是不是有点怪怪的。可不可以先计算每一笔交易的hash值,然后再两两合并计算hash,一直递归最后算出一个最终的hash值。这个就是merkle hash。最终的hash值就是多笔交易的集合的hash值,也叫merkle root。

下面画个merkle树:

通过这种层层相扣的计算hash,让你不仅可以知道数据是否被篡改,甚至还能知道哪个具体的交易被篡改。

我们在之前的《

自己动手写区块链-发起一笔交易(Java版)

》其实就是已经提到过merkle算法,并且还贴出来代码,这里再贴一遍:

这会你也许会说这个merkle树就这么点作用啊。别急,它很厉害的。你发现没,merkle树是一个二叉树。这种树结构在数据校验时会帮我们更快的校验数据。

你知道比特币是一个分布式的网络结构。当一个节点要想同步账本数据时,比如A节点和B节点取得了联系,A从B处同步数据,那么同步过来的数据是不是要校验?

校验时发现同步过来的数据的merkle root和B的不一致。此时就会按照树的方式一层层的去检查,看具体的哪些交易数据被破坏了,检查出来后,只需要下载那些不一致的交易事务就是了。

你会发现,通过这个merkle二叉树,让我们很快地就检索到了有问题的交易事务,这正是树的魅力啊。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180929G1HIRG00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券