区块链科普第2篇
本文白话两个概念:哈希算法和数字签名。
哈希算法
什么是哈希算法?
哈希算法就是将任何数据文件通过hash变换为一个固定长度相对较短的数据。
给个直观展示
我输了一段乱七八糟的一段文字,使用不同的哈希算法,得到"结果",这个"结果"是叫做哈希值。
它有什么特点呢?
这个值的长度是固定长度,计算机文件在计算机存储都是从0和1构成,一个文件可能就有无数个0和1构成,使用哈希算法后,大大缩短了长度。
这个值是独一无二的,哪怕你修改一个字符,这个值就会变成另外一串东西。
不可逆推,你看到这么一串乱七八糟的玩意,有办法推出原文么。
计算快,无论文件多大,哪怕是个10多G的电影,你眨下眼,就给算出来了。
仔细的同学,刚才会从上面的图看到md5、sha1这些玩意,这些就是哈希算法,算法的精妙在于这个值对于不同的数据还是不一样的,如果不同的数据生成的hash值一样,就是有名的"hash碰撞",不过这种概率极低,作为入门,先不做介绍。
数字签名
在
区块链知识储备-非对称加密
我们举了个非对称加密的例子, 小明给小红写信,内容虽然加密了,但是小红怎么知道小明写的,而不是小王、小李写的。这时候数据签名就派上用场了。
数字签名是什么?
简单言之,只有信息发送者才能产生的字符串,也是一串乱七八糟的东西:比如 WTU3Y3BxelY2YXR
数字签名是怎么产生的?
1.哈希密文,得到一个哈希值
2.然后用发送者的私钥加密这个哈希值
那具体怎么验证呢?
我还是举个例子,小明准备给小红发信息"周天出去约会呀?",但没法明发,小红老妈看小红很紧。
1.防止小红老妈看破信息,小明先用非对称加密:用小红的公钥对密文"周天出去约会呀"加密得到加密信息"ABC"。
2.小明想怎么证明是小明自己发的呢,而不是我的情敌小王发的,数字签名登场,首先小明把密文"周天出去约会呀"哈希得到一个哈希值:"666",然后在用自己的私钥加密这个哈希值:"666",得到数字签名:"DEF"
3.小明把加密信息"ABC"和数字签名"DEF"就发给小红了
4.小红接到这两个信息后,先用自己的私钥解密加密信息"ABC"得到"周天出去约会呀"的信息
5.小红用哈希算法对加密信息"周天出去约会呀"进行哈希,得出哈希值"666",那么谁是"666"呢?然后小红用小王的公钥解密数字签名"DEF",得到解密结果"777",哦,不是小王,然后用小明的公钥解密数字签名"DEF",得到是"666",喔,是小明约我,^ ^。
敲黑板
公钥和私钥互为加解密工具,可以“公钥加密,私钥解密”,也可以“私钥加密、公钥解密”,无法"公钥加密,原公钥解密"、"私钥加密,原私钥解密"。
为什么不用私钥加密原文?因为如果用私钥加密,那就只能使用公钥解密,而公钥都是公开的,这样就使加密失去意义。数字签名用私钥加密的是密文的哈希值,解密后也只是哈希值,作为校验身份挺好用的。
哈哈,所以说再次体现了私钥的重要性,自己发出的信息也无法抵赖,说谎都没法说。哈希函数和电子签名都是区块链的基本技术知识,如果有点理解不了,多看看文中那个例子,回味几遍。希望有所收获。
END
领取专属 10元无门槛券
私享最新 技术干货