一.RSA加密的核心原理
基于大数字分解的困难性,使用非对称(公钥和私钥)加密算法进行加解密,公钥公开分享,私钥保密,知道公钥很难推导出私钥,安全性比较高。
二.算法核心步骤
RSA算法主要有三大流程:密钥对生成、加密和解密三个阶段:
1.秘钥生成
2.加密过程:
3.解密过程:
n 表示模数,c 表示密文,m 表示明文。
三.加密算法计算过程:
一.生成密钥对
1.选取两个质数(p & q)
一般都是随机选择两个比较大并且不相等的质数 p 和 q,实际应用中会更大,为了方便推导和计算这里选取 p = 13 & q = 17。
2.计算模数 n
模数 n 就是密钥的长度,一般实际场景中 RSA 的长度是1024。
3.计算欧拉函数 
先说计算结果:。
欧拉函数含义:求解在小于等于n的正整数之中,有多少个数和 n 是互质的关系?(假设 n = 10,在 1~10 之间有 1,3,7,9 四个数与 10 构成互质关系,所以计算结果为 4)
欧拉函数计算方式有三种:
a.如果 n 是质数,则 ,因为每个质数只有 1 一个因子,所以除去本身有 n - 1 个。
b.一般情况下的计算方式:
如果 n 可分解为两个互质的整数乘积,则 。注意!这里 p 和 q 是互质关系,比如:
c.如果 n 是一个质数的 k 次方,那么其计算方式为 ,比如:
4.公钥指数 e
随机选取一个整数 e,要求 ,并且 e 与
互质。这里选取 e = 7。
5.计算私钥指数 d
私钥指数 d 就是 e 对于 的模反指数,也就是 ed 可以被
除的余数为1,公式为:
就是解方程 ,用扩展欧几里得算法求逆元,最终计算结果 d = 55。
6.最终获得密钥对:
公钥:(e,n) = (7,221)
私钥:(d,n) = (55,221)
二.加密过程
假设需要加密传送的信息为 m,且必须满足 m 为整数,,这里选取 m = 8。
使用公钥加密过程:
// 密文计算过程
8^2 mod 221 = 64
8^4 mod 221 = (64)^2 mod 221 = 4096 mod 221 = 118
8^6 = 8^4 × 8^2 = 36 × 64 = 2304 mod 221 = 38
8^7 = 8^6 × 8 = 118 × 8 = 944 mod 221 = 83
最终得到密文 c = 83。
三.解密过程
使用私钥解密密文 c = 83:
// 分解模数 n = 221 = 13×17
m_p = 83^{55} mod 13
m_q = 83^{55} mod 17
// 简化指数
83^{55} mod 13 = (83 mod 13)^{55 mod 12} = 5^{7} mod 13
5^2 mod 13 = 25 mod 13 = 12
5^4 mod 13 = 25^2 mod 13 = 625 mod 13 = 1
5^6 mod 13 = 5^4 x 5^2 mod 13 = 1 x 12 mod 13 = 12
5^7 mod 13 = 5^6 x 5 mod 13 = 12 x 5 mod 13 = 60 mod 13 = 8
83^{55} mod 13 = 8 mod 13 = 8
// 计算 mod 17:
83^{55} mod 17 = (83 mod 17)^{55 mod 16} = 15^{7} mod 17
15^2 mod 17 = 225 mod 17 = 4
15^4 mod 17 = 225^2 mod 17 = 16
15^6 mod 17 = 15^4 x 15^2 mod 17 = 4 x 16 mod 17 = 64 mod 17 = 13
15^7 mod 17 = 15^6 x 15 mod 17 = 13 x 15 mod 17 = 195 mod 17 = 8
83^{55} mod 17 = 8 mod 17 = 8
// 合并结果(解同余方程组)
m ≡ 8 mod 13
m ≡ 8 mod 17
// 显然 m = 8 同时满足两个方程
// 固最终接还原明文为 8
m = 8