哈希算法

哈希算法

00:00
05:27

大家好,链团之声带您走进区块链的那些事儿,上期我们说到区块链 本质上是一种公开的账本,这个账本内容由全部节点投票决定,账本数据存储在各个节点的硬盘中。把区块连接起来的过程叫做区块链,这个链接与镶嵌的过程要得益于哈希算法,才能保证数据不被篡改。

王酵链,请发言,哈希与嘻哈有什么关联?
小九,我被你搞得有点发慌,因为这个问题已经严重超纲,哈希与嘻哈联系起来太牵强,所以我要diss(怼)你没商量!
药!药!嘻哈是种文化,哈希是种算法,算法就是一种流程、一种运算、一种套路,如果没有算法,再好的计算机也没办法!
听了这段嘻哈的对话,我们对哈希算法的理解可能跟九九一样还是模棱两可的,我们再听听酵链的解释:例如说九九喜欢的甜甜圈,如果想把原材料加工成甜甜圈,中间也要运用一定的“算法”,从原料到成品,中间的加工过程就叫作算法。一个算法往往是由不同的操作步骤按照一定顺序或规则组织起来而形成的。 我们要讲的哈希算法就是这样,哈希算法并不是一个算法,而是一大类算法的统称。哈希算法种类很多,但是它们都具有如下四大性质:
第一个性质:等长性
不管输入的数据是长还是短,算法得出的哈希值都具有相同的长度。哈希值往往很短,通常只有一两百个字节,占用的存储空间也很小。

第二个性质: 单向性
由数据得出哈希值非常容易,但是从哈希值推导出原始数据是不可能的,即使在知道哈希算法细节的情况下也不可能,这一特性对于确保区块链安全性至关重要。
第三个性质:无序性
就算原始数据仅仅改变一个字节,它的哈希值也会变得面目全非,完全没规律。当然,现实中的哈希值不会是任何有含义的文字,往往是一串随机字符。
最后是第四个性质:一一对应性
同一个原始数据用同样的哈希算法,永远得到同样的哈希值,一个哈希值只能有唯一的数据值与其相对应。
 
上述的哈希算法的四种特性在后面会多次提到,大家不要忘记哦!
听到这九九又有一个疑问,我听说哈希算法还会出现一种叫作“碰撞”的现象,这又是什么意思呢?酵链说是有这种现象,英文叫作collision.一般译作“碰撞”或“冲突”,要理解这个概念,要从鸽笼原理说起。
鸽笼原理是什么呢,举个例子:如果有10只鸽子住在9个笼子里,那么至少有一个笼子里有两只鸽子。我们知道哈希值都很短,而数据值一般较长。因此,哈希值可以取值的个数也比数据值少得多。根据鸽笼原理,就会出现两个甚至更多数据值共用一个哈希值的情况,这就是所谓的“碰撞"。


哈希算法不知道大家听明白了没有,重点来了,它是如何应用到区块链的呢?
区块的生成是有时间顺序的。在每一个新区块的数据结构中,有一个固定的位置用来存放上一个区块的哈希值。而这个新区块也要整体求一个哈希值,存入下一个区块。
随着新区块的生成,旧区块就会被越“埋”越深,安全性也就越来越高。因为如果你要篡改一个区块,它的哈希值也会变化。这就意味着它的下一个区块也需要修改,否则就对不上号。
以此类推,后面所有新生成的区块都要修改。
把每一个区块的哈希值放到下一个区块中形成一个链条,这就是“区块链”这个名称的由来,是不是有有点像成语接龙?


好的,本期节目我们提到
1. 哈希不是一种算法,而是一大类算法的统称。
2. 哈希算法都具有“等长性”“单向性”“无序性”“一一对立性”这四大特性。
3. 区块链就是靠将前一个区块的哈希值放入下个区块中来形成链条的。

以上内容来自专辑
用户评论

    还没有评论,快来发表第一个评论!