哈希简单的理解,就是把一串长的数据变成一串短的数据,它有三个特点:
第一、它具有单向性。
我们只能够把长的数据计算成一个短的哈希,我们不可能把哈希再推导出原来的数据,很多人很好奇区块链是怎么形成,比如区块打包以后,区块就会被计算出一个哈希,哈希会存放到下一个区块当中,下一个区块里面的哈希就把上一个区块给锁定了这就是传统中的哈希锁定,区块链的不可更改就是从这里面来的,因为是前面的区块更改了,后面区块里面存在哈希就不能够对应了,所以区块链它是每一个区块都对上一个区块进行的内容的锁定,这就是哈希锁定。
第二、哈希具有唯一性。
哈希的唯一性就是我们把一个长的数据变成一个哈希数据,每一个长的数据它变成的哈希数据都是唯一与之对应的,但是这句话是有问题的,因为把长数据变成短数据,或者是把长的文件变成一个短的哈希,那在科学上,它是有一定的概率会形成相同的哈希的,只是概率极低极低,哈希有唯一性就是这么来。
第三点、哈希具有离散性。
离散性就是我们两个非常相近的文件,或者是我们两个只相差一位数的一个长数据,我们计算出来的哈希它的数值是天壤之别,是没有任何相似地方的,哈希的离散性主要是为了规避一些有特征的攻击。
如果们的两个文件相差只有那么一丢丢,如果计算出来的哈希也很相近,它是更容易遭受到攻击的,所以正常的哈希它有这三个特点,哈希它的长度是32个字节,每个字节是八位数,现在通用的哈希都是256位数字,哈希的数值就是0-2的256次方,那2的256次方大概是多大,它比全宇宙的原子数量还要多。
哈希我们可以把它理解为是一个长数据或者是一个大的数据的一个指纹,哈希的用法我给大家归纳了三种:
第一、它可以加快原始数据的比对效率。
以及在区块链里面验证我们的状态数的效率。比如以太坊的账户中我们每个人的账户剩了多少钱,都在账户里面显示,每个节点的结果要是一致的,一致比对起来就很麻烦,我们通过生成哈希来比对的话,那验证起来就很简单了。
第二、它还可以应用到挖矿当中。
应用到挖矿当中,我们拿比特币来进行举例,大家知道我们每个节点存的区块数据都是一样的,一样的区块得出的哈希就是一样的,这样的话就没有办法确认谁来拿到奖励。