1.非对称加密算法
非对称加密算法需要两个密钥:公开密钥(publickey:简称公钥)和私有密钥(privatekey:简称私钥)。公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。 ——————百度百科
假设A向B通过非对称加密算法进行信息交换,流程如下:
①B生成一定密钥并将公钥公开,A获取B的公钥
②A使用该公钥对信息进行加密后再发送给B
③B收到A发送过来的加密信息后,再用自己的私钥对信息解密
2.RSA算法
RSA算法就是非对称加密算法。RSA算法实现分为4个部分:生成密钥、加密、解密和签名。
2.1生成密钥
①生成两个不相等的质数 p 和 q(p和q不应太过相近)。假设 p=13,q=19。
②计算出 p 和 q 的乘积为 n。此处 n=247。
③计算 n 的欧拉函数 φ(n)。φ(247)=216。
④选择一个整数 e,使 1<e<φ(n),并且与 φ(n) 互质。此处 e=31。
⑤找出一个整数 d,使得 e×d÷φ(n)......1,余数等于 1。可知 d 为 7。
d=7 为 e=31 关于 φ(n)=216 的模逆元。
⑦得到私钥和公钥
2.2 加密
A获取B的公钥后对信息进行加密。
①将明文转换为 Unicode 编码。
②利用加密公式加密为密文。加密公式如下所示:
m 为 Unicode编码 转换为十进制,其中 e=31,n=247。
以 Unicode 编码为 6F 的字符加密为例,其转换过程如下:
- 首先将 6F 转换为十进制数:
- 代入加密公式:
- 转换为十六进制为 D6
上图的 Unicode 编码经过加密后如下图所示:
2.3 解密
① 利用解密方程对密文进行解密。解密方程如下所示:
c 为 Unicode 编码转换为十进制,其中 d=7,n=247。
以 Unicode 编码为 D6 的字符解密为例,其转换过程如下:
- 将 D6 转换为十进制数:
- 代入解密公式:
- 转换为十六进制为 6F
经过解密后如下图所示:
2.4 签名
假设 A 给 B 发送数据,则过程如下:
①A 先用 B 的公钥对原始数据进行加密
②计算加密数据的哈希值
③用 A 的私钥将这串哈希值加密,这就是数字签名
④将签名放在加密的数据后面并发给 B
B 接收到 A 发来的加密数据后,处理过程如下所示:
①利用 B 的私钥将密文解密得到明文
②利用 A 的公钥将数字签名解密,得到哈希值
③将哈希值与收到的加密数据的哈希值进行比较,就可以判断信息来自 A