起源:liuchenyang0515.blog.csdn.net/article/details/109263510
对称加密
两边用同一个密钥来加解密。
A 把明文通过某一算法加密之后失去密文,而后把密文发送给 B,B 接管到密文之后用雷同的密钥执行雷同的算法去解密。X 没有密钥,即便窃取到密文也无奈窃听。
对称加密的有优缺点
- 对称加密的长处:加解密速度快
- 对称加密的毛病:会呈现密钥调配问题;密钥容易复制,不便于平安保存
密钥调配问题
对称加密的存在密钥调配问题,A 的密钥怎么能力平安的传输到 B 手里不被 X 获取到?A 间接发送密钥给 B 还是可能被 X 窃取到这个密钥,这样加密信息等于是在裸奔了。
只有用密钥加密后的信息能力平安传输,然而只有保障平安传输的前提下能力发送这个密钥。
这个情理和下图一样
非对称加密
单方应用不同的密钥来加解密,并且不能通过一个密钥推算出另一个密钥。
- 公钥加密,私钥解密
- 私钥加密(数字签名),公钥解密
A 把当时筹备好了非对称密钥对,别离为公钥和私钥,这一套非对称密钥对能互相加解密。公钥是公开的,私钥只有本人才有。而后 A 把公钥发送给 B,或者公钥放在服务器 B 自行下载。
B 拿到了公钥后用公钥的一套算法加密信息后传输给 A,A 用私钥执行另一个算法解密取得明文信息。
举荐一个开源收费的 Spring Boot 最全教程:
https://github.com/javastacks/spring-boot-best-practice
非对称加密的优缺点
- 非对称加密的长处:不会呈现密钥调配问题
- 非对称加密的毛病:加解密速度慢,仍有被窃听的隐患,起因和中间人攻打一样,前面会讲到。
既然对称加密和非对称加密都有毛病,那么咱们能不能用一种办法联合一下他们的长处造成一套比拟好的计划呢?答案是有的,那就是混合加密
混合加密
传输大量数据的时候应用对称加密,因为加解密速度快。然而因为对称加密有秘钥调配问题,所以咱们用非对称加密来加密这个对称密钥再传递给对方。
咱们会认为接下来的计划应该是比拟完满了吧?
双向通信之前要先把公钥相互交换,比方 A 和 B 要通信
- A:这是我的公钥 public_A,你收好,你生成对称密钥也给我一下
- B:好的,收到 public_A,你收好对称密钥 secretKey。而后用 public_A 加密这个 secretKey
- A:收到音讯,private_A 解密进去是 secretKey。
这就解决了对称密钥 secretKey 的密钥调配问题,而后单方就能够用 secretKey 加密音讯进行通信了。
然而这还不够,这依然会被中间人攻打!你怎么晓得把公钥发送给对方时保障公钥没被篡改掉包呢?比方下面的例子被中间人攻打之后就变成了上面的样子
- A:这是我的公钥 public_A,你收好,你生成对称密钥也给我一下
- X 取得了 A 的公钥,把本人的公钥 public_X 发给 B… B 这傻子还认为真的是 A 的公钥呢
- B:好的,公钥 public_X 已收到,生成一个对称密钥 secretKey,而后用 public_X 加密这个对称密钥。
- X 截获了这个音讯,用本人私钥 private_X 解密出对称密钥 secretKey,本人再生成一个 secretKeyXXX 用 public_A 加密一下发送给 A。A 这傻子还认为你们接下来会平安的用 secretKey 通信吗哈哈哈
- A:收到音讯,private_A 解密进去对称密钥 secretKeyXXX(其实是 X 篡改了)
X 心想,这两个傻子真认为接下来用对称密钥加密就平安了呢,我倒要听听 A 和 B 在说什么悄悄话。
上图中,中间人 X 能不仅获取 A 和 B 之间通信内容,还能任意批改,相当于一个代理抓包,批改数据。
咱们平时所用的抓包工具就须要装置一个证书,也就是你本人糊弄本人的电脑,本人充当中间人去查看网络通讯的数据,不便学习应用。
下面混合加密的例子曾经波及到数字签名,混合加密解决了对称密钥调配问题,后续解说数字签名的中间人攻打也会提到这个例子,到时候能够返回来再看,中间人攻打其实就是数字签名存在的有余。
近期热文举荐:
1.1,000+ 道 Java 面试题及答案整顿 (2022 最新版)
2. 劲爆!Java 协程要来了。。。
3.Spring Boot 2.x 教程,太全了!
4. 别再写满屏的爆爆爆炸类了,试试装璜器模式,这才是优雅的形式!!
5.《Java 开发手册(嵩山版)》最新公布,速速下载!
感觉不错,别忘了顺手点赞 + 转发哦!