哈希的意思就是引入随机数量的输入数据,将其加密,然后得出一个固定输出数据,就叫做哈希。输入可以是任何数据,只要能代表单个字节,一个MP3文件,关键在于输入可以无限大。哈希算法可以根据你的需求来进行选择,现在公开的也有很多种算法。关键点在于,这些算法会将无限的输入,转换成固定数量的字节。例如,256字节。
Hash主要用于信息安全领域中加密算法,它把一些不同长度的信息转化成杂乱的128位的编码,这些编码值叫做Hash值.也可以说,通俗的说Hash就是找到一种数据内容和数据存放地址之间的映射关系。
哈希函数、算法
哈希算法将任意长度的二进制值映射为较短的固定长度的二进制值,这个小的二进制值称为哈希值。哈希值是一段数据唯一且极其紧凑的数值表示形式。
如果散列一段明文而且哪怕只更改该段落的一个字母,随后的哈希都将产生不同的值。要找到散列为同一个值的两个不同的输入,在计算上是不可能的,所以数据的哈希值可以检验数据的完整性。
哈希表
散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。
特点:如果两个哈希值是不相同的(根据同一函数),那么这两个散列值的原始输入一定是不相同的;如果两个哈希值相同,两个输入值很可能(极大概率)是相同的,但也可能不同,这种情况称为“哈希碰撞”。
哈希性质:
(1)单向性。即给定一个输入数,容易计算出它的哈希值,但是已知个哈希值根据同样的算法不能得到原输入数。
(2)弱抗碰撞性。即给定一个输入数,要找到另一个得到给定数的哈希值,在使用同一种方法时,在计算上不可行。
(3)强抗碰撞性。即对于任意两个不同的输入数,根据同样的算法计算出相同的哈希值,在计算上不可行。
那么区块链是如何使用哈希的呢?区块链使用哈希,来表现整个区块链网络现在的状态。输入则是区块链的整个状态,也就是说近期完成的所有转账,输出就是哈希代表的区块链现在的状态。哈希就被用来在区块链网络中让各方相信,整个状态都是相同的。但是这些哈希是怎么算出来的呢?
首个哈希是为第一个区块或者是创世区块所计算的,通过区块内部的转账数据得出。初始转账的顺序被用来计算创世区块的区块哈希。后来每挖出的新区块,之前的区块哈希也会被使用,同时还有这个区块的转账信息,作为输入值,来确定区块的哈希。
这就是区块链的形成方式,每个新区块哈希指向地是之前区块的哈希。这种哈希系统保证了任何转账记录都不会被改变,因为如果任何部分的转账记录改变,那么归属于这个区块的哈希值也会改变,那么任何接下来的区块哈希也会被改变。那么你可以简单地将哈希对比,就很容易去分辨出哪儿发生了改变。