哈希是区块链技术和防篡改潜力的核心基础和最重要的方面,通过哈希算法可以保持记录以及查看数据的真实性和区块的完整性。这就是区块计数最重要技术特征的一部分。区块哈希并不包含在区块的数据结构中,在区块传输时就不会存在,也不会作为设备中区块链的一部分保存到节点的持久储存中,实际上区块哈希只是节点从网络接收到区块时自己去计算的,区块哈希可以作为块元数据的一部分储存在单独的数据库中没用雨索引和从磁盘中快速访问。
哈希算法又称散列算法,是一种可以吧任何长度数据通过散列算法就会变成固定长度数据。散列值的输出就是散列值,也就是说散列算法混合打乱数据,然后将其压缩成摘要,这样可以减少数据量。
哈希算法的三个特点【抗碰撞能力;单向性;抗篡改能力】
1--抗碰撞能力,在区块链世界之中,任何交易或账户的地址都全然由哈希算法生成。这确保了区块链网络之中交易或账户地址的唯一性,也就是说,即使大多数输入也可以获得唯一的输出
2--具有单向性。比如输入一串数据,可以通过哈希算法获得哈希值,但无法通过该哈希值推断输入的数据字符串。这是单向的。正是基于此,区块链可以精确地保护我们信息的安全性
3--抗篡改能力,对于任意一个输入,哪怕是很小的改动,其哈希值的变化也会非常大。它的这个特性,在区块与区块的连接中就起到了关键性的作用
常用的哈希算法
MD5,SHA-1,RipeMD-160,SHA-256,SHA-512;
常用的构造散列函数的方法
【数字分析法;随机数法;直接寻址法;除留余数法;折叠法;平方取中法】
1. 数字分析法:就是找出数字的规律,尽可能利用这些数据来构造冲突几率较低的散列地址
2. 随机数法:一般是用于关键字长度不同的方面,选择一随机函数,取关键字的随机值作为散列地址。
3. 直接寻址法:指取关键字或者取关键字的某个线性函数值为散列地址。
4. 除留余数法:不仅可以对关键字直接取模,也可以在折叠、平方取中等方面运算之后取模。
5. 折叠法:将关键字分割成位数相同的几部分,最后一部分位数可以不相同,然后取这几部分的叠加再去除进位作为散列地址。
6. 平方取中法:取关键字平方后的中间几位作为散列地址。
所有哈希函数都有下列基本特性:如果两个哈希值有所不同,则两个哈希值的输入值也有所不同。这就是确定性哈希函数的结果。另一方面,哈希函数的输入和输出并不相互对应。如果两个散列值相同,则两个输入值可能相同,但不能绝对确定它们是否必须相等,而且还存在散列冲突的可能性也称为哈希碰撞。输入一些数据来计算散列值,然后部分更改输入值。混淆轻微的散列函数将产生全然有所不同的散列值。典型的哈希函数有一个无限域(如任意长度的字节字符串)和一个庞大值域(如特定长度的位字符串)。在某些情况之下,哈希函数可以设计为定义字段和大小相近的值字段间的一对一对应关系。一对一散列函数也称为置换。可逆性可以通过对输入值进行一系列不可逆的“混合”操作来实现。