前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >什么?区块链中的hash算法!施主,快扶老衲起来

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

作者头像
ImportSource
发布2018-10-23 11:21:49
7270
发布2018-10-23 11:21:49
举报
文章被收录于专栏:ImportSourceImportSource

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重新计算一遍。如果区块链足够长,你篡改所有的区块链的代价是非常之大的,甚至是不可能的(这里说的比较谨慎和谦虚)。

相关阅读:自己动手写区块链(Java版)自己动手写区块链-发起一笔交易(Java版)乾隆给魏璎珞转了几个比特币-用excel表格轻松明白区块链的核心概念-UTXO一场区块链大撕逼Blockchain:Internet问世以来最具破坏力的发明

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二叉树,让我们很快地就检索到了有问题的交易事务,这正是树的魅力啊。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-09-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 ImportSource 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
区块链
云链聚未来,协同无边界。腾讯云区块链作为中国领先的区块链服务平台和技术提供商,致力于构建技术、数据、价值、产业互联互通的区块链基础设施,引领区块链底层技术及行业应用创新,助力传统产业转型升级,推动实体经济与数字经济深度融合。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档