携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第3天,点击查看活动详情
哈希算法
指纹是人类手指上的印记,因其独一无二的特性,通常用来识别罪犯,而hash值就可将其视为是数据的“指纹”。
哈希算法的特征
- 能为任意类型的数据快速创建哈希值
- 确定性
- 伪随机
- 单向函数
- 防碰撞
本文主要讲解一下伪随机,伪随机的意思是当输入数据被改变时,哈希算法返回的哈希值的变化是不可预测的。即使输入数据只有一点变化,所得到的哈希值也无法被预测。
区块哈希是什么?
在区块链中哈希的用处
- 存储交易数据,及时发现数据的改变
- 提取交易数据的指纹
- 想要修改数据就要解哈希难题(算力大于50%)
在区块链中,哈希难题的解答过程常被称为工作量证明
区块哈希那么重要,但在区块链中,区块hash并不是随机的,而是通过一些参数加密后产生的
例如:
比特币hash计算
1.block的版本 version
2.上一个block的hash值: prev_hash
3.需要写入的交易记录的hash树的值: merkle_root
4.更新时间: ntime
5.当前难度: nbits
挖矿的过程就是找到x使得SHA256(SHA256(version + prev_hash + merkle_root + ntime + nbits + x ))
假设有个链有100台机器,有人有51台机器,他就能修改geth代码,然后只用来打包自己的一个交易,这个区块里只有一个交易,它的hash就是可以算出来的,算出来以后,其他49个节点都是错的,只要这边算的足够块,那每一个节点都是可以被算出来的,如果是一个hash赌博性质的活动,别人是完全可以看程序,将这些hash给拆出来的