知识百科

哈希/Hash

哈希又称作“散列”,是一种数学计算机程序,它接收任何一组任意长度的输入信息,通过哈希算法变换成固定长度的数据指纹输出形式,如字母和数字的组合,该输出就是“哈希值”。

标签:

Hash,一般翻译做散列、杂凑,或音译为哈希,是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来确定唯一的输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。

哈希又称作“散列”,是一种数学计算机程序,它接收任何一组任意长度的输入信息,通过哈希算法变换成固定长度的数据指纹输出形式,如字母和数字的组合,该输出就是“哈希值”。哈希使存储和查找信息速度更快,因为哈希值通常更短所以更容易被找到。同时哈希能够对信息进行加密,一个好的哈希函数在输入域中很少出现哈希冲突,哈希一个特定文档的结果总是一样的,但找到具有相同哈希值的两个文件在计算上是计算上不可行的。

哈希简单的理解,就是把一串长的数据变成一串短的数据它有三个特点:

第一、它具有单向性。

我们只能够把长的数据计算成一个短的哈希,我们不可能把哈希再推导出原来的数据,很多人很好奇区块链是怎么形成,比如区块打包以后,区块就会被计算出一个哈希,哈希会存放到下一个区块当中,下一个区块里面的哈希就把上一个区块给锁定了这就是传统中的哈希锁定,区块链的不可更改就是从这里面来的,因为是前面的区块更改了,后面区块里面存在哈希就不能够对应了,所以区块链它是每一个区块都对上一个区块进行的内容的锁定,这就是哈希锁定。

第二、哈希具有唯一性。

哈希的唯一性就是我们把一个长的数据变成一个哈希数据,每一个长的数据它变成的哈希数据都是唯一与之对应的,但是这句话是有问题的,因为把长数据变成短数据,或者是把长的文件变成一个短的哈希,那在科学上,它是有一定的概率会形成相同的哈希的,只是概率极低极低,哈希有唯一性就是这么来。

第三点、哈希具有离散性。

离散性就是我们两个非常相近的文件,或者是我们两个只相差一位数的一个长数据,我们计算出来的哈希它的数值是天壤之别,是没有任何相似地方的,哈希的离散性主要是为了规避一些有特征的攻击。

如果们的两个文件相差只有那么一丢丢,如果计算出来的哈希也很相近,它是更容易遭受到攻击的,所以正常的哈希它有这三个特点,哈希它的长度是32个字节,每个字节是八位数,现在通用的哈希都是256位数字,哈希的数值就是0-2的256次方,那2的256次方大概是多大,它比全宇宙的原子数量还要多。

哈希我们可以把它理解为是一个长数据或者是一个大的数据的一个指纹,哈希的用法我给大家归纳了三种:

第一、它可以加快原始数据的比对效率。

以及在区块链里面验证我们的状态数的效率。比如以太坊的账户中我们每个人的账户剩了多少钱,都在账户里面显示,每个节点的结果要是一致的,一致比对起来就很麻烦,我们通过生成哈希来比对的话,那验证起来就很简单了。

第二、哈希还可以用于签名。

大的文件和大的数据直接对他进行加密是很复杂的,所以说我们把大的数据和文件直接计算出一个哈希出来,然后我对哈希进行签名,签名之后,我就得到一个数字签名,然后大家可以利用我的公钥这解开数字签名,他就可以得到相应的哈希,然后和之前签名的哈希进行比对,大家就可以知道这个签名是我做的了。

第三、它还可以应用到挖矿当中。

应用到挖矿当中,我们拿比特币来进行举例,大家知道我们每个节点存的区块数据都是一样的,一样的区块得出的哈希就是一样的,这样的话就没有办法确认谁来拿到奖励。

为了解决该问题,中本聪设计了个方案:

在每个区块里面,它控制了一个小的空格,这小的空格你可以自己填数据,你自己填数据,每个人计算出来的哈希不一样,因为哈希具有离散性,所以挖矿的原理就是系统规定你计算出的哈希在某个范围以内,你就可以获得出块权,我们的矿机就在不断的修改我们区块的数值,不断的计算出哈希,那就力求计算出来的哈希符合系统的要求,以此来获得出块权。

数据统计

相关导航

暂无评论

暂无评论...