![222f427b795932b94780bd028af5ff61.png](https://img-blog.csdnimg.cn/img_convert/222f427b795932b94780bd028af5ff61.png)
1、对称加密
对称加密,是指在加密和解密时使用同一个秘钥。
![553bd3ab233b64cc27b43028145faf29.png](https://img-blog.csdnimg.cn/img_convert/553bd3ab233b64cc27b43028145faf29.png)
对称加密
2、非对称加密
与对称加密算法不同,非对称加密需要公钥和私钥,公钥和私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密。公钥是公开的,秘钥是自己保存的。
![78335f20bb5556115dd53bff3db736c2.png](https://img-blog.csdnimg.cn/img_convert/78335f20bb5556115dd53bff3db736c2.png)
3、RSA:非对称加密鼻祖
○ RSA 原理
![17f5cff69064c2b889b3908cc8a4fa09.png](https://img-blog.csdnimg.cn/img_convert/17f5cff69064c2b889b3908cc8a4fa09.png)
① 找出质数 :
P = 3, Q = 11
② 计算公共模数:
N = P * Q = 33
③ 欧拉函数:
φ(N) = (P-1)(Q-1) = 2 * 10 = 20
④ 计算公钥 E
1 < E < φ(N), E 是整数且和 φ(N) 必须互质数(公因数只有 1 的两个非零自然数,叫做互质数)。
E 的取值范围 {3, 7, 9, 11, 13, 17, 19},
取 E = 3 , 满足 E 和 φ(N) 是互质数。
⑤ 计算私钥 D
E * D % φ(N) = 1;
3 * D % 20 = 1;
===>>> D = 7
⑥ 加密
加密的明文 M = 2;
C = M^E mod N;
===>>> 加密后的密文为:C = 8
⑦ 解密
M =C^D mod N;
===>>> M = 2;
○ RSA Java实现
使用 Java 实现 RSA 非对称加密
![54680f670bad984fe148a88d6599c26e.png](https://img-blog.csdnimg.cn/img_convert/54680f670bad984fe148a88d6599c26e.png)
测试:
![e3ad471bee450c41a0f80c3a11efd3e6.png](https://img-blog.csdnimg.cn/img_convert/e3ad471bee450c41a0f80c3a11efd3e6.png)
输出结果:
![9e47cade005f1dacd661a7193bd829c4.png](https://img-blog.csdnimg.cn/img_convert/9e47cade005f1dacd661a7193bd829c4.png)
欢迎关注 @Python大星 ,一个会点 Python 的 Java 程序员。如果你有更好的想法,欢迎留言,一起探讨,想说你就说啊!
@Python大星 | 文