首先提一个问题:如何在互联网唯一标识一个文件?编号!需要解决两个问题:
- 能定位;
- 不重号。
然而面对互联网海量的文件,有没有高效的编号方法?有,答案是哈希算法。
什么是哈希算法
哈希算法是将文件映射为较短的固定长度字符串,该字符串称为哈希值。
哈希值的特性
1.确定性
对于同一个输入,无论用哈希函数计算多少次,都会得到相同的结果。
2.快速计算
哈希一部20G高清电影和一个5K文本文件复杂度相同,计算量都极小,可以在0.1秒内得出结果。
3.抗篡改能力
对于任意一个输入,哪怕是很小的改动,其哈希改变也会非常大。
比如 “This is a test” 对应的哈希值是C7BE1ED902FB8DD4D48897C6452F5D7E509FBCDBE2808B16BCF4EDCE4C07D14E,
而 “this is a test” 对应的哈希值是 2E99758548972A8E8822AD47FA1017FF72F06F3FF6A016851F45C398732BC50C。
看上面的例子,即便只改变了输入字符串第一个字母的大小写,输出哈希值也是完全不同的。用前段时间比较流行的区块链撸猫游戏类比一下,
“This is a test” 的哈希值对应猫可能是这样的:
喵~
而只改了个大小写,“this is a test” 的哈希值对应猫可能就变成下面这样了:
喵喵~
4.不可逆推
在具备编码功能的同时,哈希算法也作为一种加密算法存在。即,你无法通过分析哈希值计算出源文件的样子。
能用极快的速度给你的文件编出不重复的号码,而且任何人都无法通过这个号码推算出文件原来的样子,这就是哈希算法的意义。
在区块链中,通常使用SHA–256(安全散列算法)进行区块加密,这种算法的输入长度为256位,输出的是一串长度为32字节的随机散列数据。区块链通过哈希算法对一个交易区块中的交易信息进行加密,并把信息压缩成由一串数字和字母组成的散列字符串。区块链的哈希值能够唯一而准确地标识一个区块,区块链中任意节点通过简单的哈希计算都可以获得这个区块的哈希值,计算出的哈希值没有变化也就意味着区块中的信息没有被篡改。
网友评论