怎样才能证明你给你女朋友发的消息就是你发的?

我们在以下这篇中

如果你怕文件被篡改,那就这样做

就说到了 hash 加密



由于它是一种

单向、不可逆的函数



所以即使我们拿到了加密后的指纹

也很难推算出原文



python


小帅b记得之前在做电商项目时

有一个用户注册登录的功能

就用到了这种加密方式



一般来说

用户通过用户名密码注册



在数据库是不会存储

用户的明文密码的


需要在代码中给

用户的密码进行加密


也就是说

当用户在注册时提交自己的密码

后端需要将用户传来的密码 + salt 进行加密



salt是一个随机数

将它与用户密码结合起来生成密文



在数据库保存用户的密文和 salt 

而不保存用户的明文密码



这样

就只有用户知道自己的密码



在数据库中只存储

加密后的密文和对应的 salt

那么下次用户登录的时候



就将它的密码 + salt 进行 hash

如果结果和数据库存储的密文一致

那么就可以登录了



python



ok

我们回到上篇文末提到的问题

如果小帅b伪装成你

发布文件给你的朋友

怎么办?



为了让你更加容易理解

我接下来给你讲的东西


我来做个假设吧



假设这个是你:

python



假设这是你女票:

python


你写了一封信
想要发给你的女票


python

但是你怕你被小帅b
伪造成是你发出的信


你想要确保让你的女票知道
信就是从你这来的


于是你
用了数字签名


python


将你的信先用 hash 
生成指纹(digest)

然后在用你的私钥加密
生成数字签名(signature)


这个时候
你就将你的数字签名和信
一起发给你的女票


python


python


当你的女票收到信之后
想要确保两件事


 
python


这时候你女票拿到了
你发来的数字签名

用你的公钥进行解密


python


接着你的女票又通过
信的内容进行 hash


python



可以通过你的公钥解密
又将内容进行 hash 得到的指纹对比相同


说明你女票收到的这封信
是由你发出的
也没有被篡改过


python


有一天晚上
小帅b偷偷的换掉了你女票的公钥


也就是说
原本她有的是你的公钥


但现在
你的公钥被换成我的公钥了
而你的女票用着假公钥还笑嘻嘻


python

小帅b用自己的私钥生成数字签名
然后给你的女票发了这样的信


python


这时候你女票还是用上述的操作
获得了指纹和验证信的内容


因为她用的是我的公钥
所以她以为你是发的内容
感觉万念俱灰


而你却
百口莫辩


python


后来在你的软磨硬泡之下
你的女票原谅你了


但是你想啊
挖槽
不能继续背锅啊


于是你想到了一个办法
你去证书中心(CA)
给你的公钥做了一个认证


也就是说
证书中心用他们的私钥


给你的公钥相关消息
进行加密生成一个证书

那么当你下次再给你女票
发信息的时候
就将证书一起携带过去
python



那么当你女票收到你的信息之后
她就可以通过数字证书
拿到你被认证了的公钥

从而确定
这就是你发过来的
没有被伪造过的内容了


python


这就是数字签名相关的
希望对你有帮助
peace

更多相关

pythonpythonpython


交个朋友呗

python


python

原文始发于微信公众号(学习python的正确姿势):python

2 Replies to “怎样才能证明你给你女朋友发的消息就是你发的?”

发表回复