- 前言:
在应用层有两个协议分别叫做 HTTP 和 HTTPS,这两个协议想必大家都不陌生,HTTPS 与 HTTP 最大的区别就是 HTTP 发送的数据在网络中发送的信息是以明文的形式发送的,并且是可以被人截获,别人截获到信息后很容易就得到了信息内容。为了让别人不容易拿到消息或者说让别人基本不可能拿到消息,就有了HTTPS,HTTPS 对数据进行了一层加密,让别人即使拿到消息也没办法解密(或者解密的难度变大)。
可以参考:解析HTTPS
- 简介
通过上面那篇博客我们可以得知,在 HTTPS 中比较重要的或者说加密的关键就是非对称加密。在下面实现的就是非对称加密中的一种算法------RSA算法。
- 原理
RSA中想要进行加密和解密的过程,最重要的就是求出 公钥 和 私钥,然后通过下面的公式进行加密和解密:
- 加密公式:公钥(E, N)
密 文 = ( 明 文 E ) % N 密文=(明文^E)\%N 密文=(明文E)%N - 解密公式:私钥(D, N)
明 文 = ( 密 文 D ) % N 明文=(密文^D)\%N 明文=(密文D)%N
加密解密流程:
清楚了整个流程之后,接下来整个流程中最难的部分也是最重要的部分就是如何求得公钥和私钥!
公钥和私钥不只是两个数字,公钥和私钥分别是一对数字组成的,也就是我们刚才写的公式中的公钥是(E, N),私钥是(D, N),换言之就是我们如何取求得 E、D、N ?
密钥产生流程:
举个例子:
1、选取素数p1 = 5, p2 = 11;
2、计算两个素数的乘积得到n = p1 * p2 = 55;
3、计算欧拉 φ(n) = (p1 - 1)(p2 - 1) = 4 * 10 = 40;
4、选一个与 φ(n) 互质的数 e = 3;
5、由(d * 3) % 40 = 1;计算得出模反元素 d = 27;
6、得到公钥(3, 55) 私钥(27, 55)
7、加密:对数字 " 3 " 进行加密:由加密公式得:密文 = (3^3)%40 = 27
8、解密:对密文" 27 "进行解密: 由解密公式得:明文 = (27^27)%40 = 3
数学知识
欧拉函数:
φ ( x ) = x ∏ i = 1 n ( 1 − 1 p i ) φ(x)=x\prod_{i=1}^{n}(1-\frac{1}{p_{i}}) φ(x)=x