1.常见的三种加密算法及区别
2.加密算法在HTTPS中的应用
3.MD5的实现原理
http明文传输
明文传输很容易被人窃取

加个密吧

多个客户端怎么办?
但是一个服务端会和很多客户端进行数据传输,如果都使用相同的秘钥,那么秘钥被泄漏几率会很大
那么我们需要和每个客户端通信使用不同的秘钥

其中一端生成秘钥
对每个客户端使用不同的秘钥,那么这个秘钥是怎么让双方都知道的呢?只能让其中一方生成秘钥然后传给另一方

但是这种方式,如果在秘钥传输的时候被中间人捕获怎么办?如果保证秘钥不被窃取?给秘钥在进行对称加密吗?这好像面对了鸡生蛋,蛋生鸡的问题上了
非对称加密
我们知道非对称加密的一个特点是,公钥加密的数据只有私钥能解,那么如果让客户端通过公钥把对称秘钥进行加密,那么只有服务端能够解出这个秘钥,是不是问题就解决了?

通信流程就变成了这个样子

中间人篡改?
但是有个问题,如果中间人把这个公钥掉包了怎么办?

这个问题变成了我们如何确认对方身份,确认某一个公钥确实是属于某一个网址的。
身份校验-签名证书
我们知道防止篡改的一个方法是数字签名,如果我们有个第三方组织,给每一个网址颁发一个证书,并且用第三方的私钥钥将证书进行签名,我们客户端收到证书的时候再通过第三方的公钥对证书进行校验。那么就可以解决校验身份的问题了。

证书的组成

检验一个证书的合法性的方式

将源摘要和实际的摘要对比
那么这种情况下,中间人篡改就会失败

完整的Https的流程
一个完整的Https的流程变成了这样

扩展:
其实对称秘钥不完全是有客户端一方直接决定的,是通过Diffie–Hellman算法交换实现的
对称秘钥交换的原理:https://www.cnblogs.com/svan/p/5090201.html
QA
- 为什么用对称加密进行数据传输
- 第三方组织的公钥从哪里来的?
- https既然这么安全了为什么Charles还能抓到
- 为什么Android7以上这个方式就不行了
- 证书中包含什么信息
写文章不易,路过的伙伴辛苦点个赞,谢谢支持!
网友评论