区块链知识储备-哈希算法和数字签名

区块链科普第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

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180609G1PVP500?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券