关于 RSA:RSA 加密算法过程

RSA 是一种非对称加密算法,用"公钥"加密,用"私钥"解密,保证数据传输安全。

比喻理解:锁和钥匙

想象一下:

  • 公钥是"上锁的锁",别人可以用它锁住箱子(加密),但打不开。

  • 私钥是"钥匙",只有你自己有,可以打开锁(解密)。

所以:

  • 我给你一个"锁"(公钥),你用它锁住一个箱子(加密数据)送回来。

  • 只有我有钥匙(私钥),我能打开箱子(解密数据)。

注意事项

  • 明文必须小于 n,也就是 m<n 否则需分块加密

  • 实际使用中,RSA 通常只加密 对称密钥(比如 AES),而不是大量数据

  • 使用填充算法(如 OAEP)防止加密攻击

第一步:选两个质数

我们先选两个质数(不能被整除的整数):

bash 复制代码
p = 3
q = 11

第二步:计算 n 和 φ(n)

bash 复制代码
n = p × q = 3 × 11 = 33
φ(n) = (p - 1) × (q - 1) = 2 × 10 = 20

其中 φ(n) 是一种叫"欧拉函数"的东西,是 RSA 算法的核心之一。

第三步:选一个公钥 e

我们要选一个跟 φ(n) = 20 互质的整数 e,通常选一个小的质数。

bash 复制代码
e = 7 (因为 7 跟 20 没有公因数,合法)

第四步:求私钥 d(让它能反过来解密)

找一个整数 d,让它满足:

bash 复制代码
(e × d) % φ(n) = 1
(7 × d) % 20 = 1

试试:

bash 复制代码
7 × 3 = 21,21 % 20 = 1 

所以:

bash 复制代码
d = 3

总结密钥对:

bash 复制代码
公钥 (e, n) = (7, 33)
私钥 (d, n) = (3, 33)

加密过程

假设明文**m = 4** ,我们用公钥 (7, 33) 加密:

bash 复制代码
c = m^e % n = 4^7 % 33
   = 16384 % 33
   = 16

得到密文:c = 16

解密过程

我们收到密文 16,用私钥 (3, 33) 解密:

bash 复制代码
m = c^d % n = 16^3 % 33 = 4096 % 33 = 4

恢复出原文:m = 4

欧拉定理

欧拉定理(非常关键)

如果:

  • n 是两个大质数**p * q**

  • m 与**n** 互质(也就是说 m 不能被 n 的质因子整除)

那么一定成立:m^φ(n) mod n = 1 (其中 φ(n) 是欧拉函数)

φ(n):如果 n 是两个质数 p 和 q 的乘积:n = **p * q,**那么欧拉函数就是:φ(n)=(p−1)(q−1) ,这表示从 1 到 n−1 里面,有多少个数跟 n 互质。

假设:

  • p=7 ,q=11

  • 那么 n=p ⋅ q=7 * 11 = 77

  • 则:

    φ(77) = (7 − 1)(11 − 1) = 6 * 10 = 60

所以如果 m 与 77 互质,那:m ^ 60 mod  77 = 1

深入理解

我们选 d 的时候,是专门选出来能"抵消" e 的效果的。

所以:

  • 加密是:先做 e 次方

  • 解密是:再做 d 次方

  • e 和 d 是互相"取消"的

就像是这样理解(m是需要用rsa加密的数据)

bash 复制代码
m^e 再 ^d   就等于 m^(e*d)     

而我们生成 d 的时候,保证 e*d 刚好变成 "1 + φ(n) 的倍数"

这个时候 m^(e*d) 就刚好又变回 m 本人。

解释:

如果:e * d = 1 mod φ(n) ⇒ e * d = 1 + k * φ(n)

所以:m ^ (e * d) = m ^ (1+k * φ(n)) = m * ​​​​​​​m ^ (k * φ(n))

然后根据欧拉定理:m ^ φ(n) mod n = 1 ⇒ ​​​​​​​m ^ (k * φ(n)) mod n = 1

所以:m^(e * d) mod n = m mod n = m 数据被解密(rsa要求被加密的数据满足 m < n)

总结

步骤 操作
选质数 p = 3, q = 11
计算 n n = 33
计算 φ(n) φ(n) = 20
选公钥 e e = 7
求私钥 d d = 3
加密 m = 4 → c = 16(用公钥)
解密 c = 16 → m = 4(用私钥)
相关推荐
蛋蛋的就会顺顺的27 分钟前
hot100——矩阵
java·数据结构·算法·leetcode·力扣
老歌老听老掉牙34 分钟前
麻花钻切屑形态演变的力学机制与临界条件分析
python·算法·钻头
zhangfeng11331 小时前
国产GPU/AI算力芯片现状(修订完整版 · 截至2026年9月
人工智能·算法·ai编程·npu
学代码的CJY1 小时前
从代码出发理解时间复杂度与空间复杂度
数据结构·算法
白帽攻防录2 小时前
SRC 挖洞:WSO2 JWT 算法混淆绕过深度复盘,CVE-2026-5430 不支持的算法怎么变成管理员
网络·算法·安全·网络安全·jwt
小O的算法实验室2 小时前
IEEE TEVC,基于精确与DQN群智能调度方法用于多目标异构USV
算法
可乐ea3 小时前
AI Agent 工具调用准确性评测:选择错误与参数错误分开测
大数据·人工智能·算法·大模型·工具调用·ai智能体·agent评测
上位机妹子3 小时前
C 语言 数组删除指定元素(快慢指针法)
c语言·数据结构·算法
心中有你02143 小时前
【路径规划】A*寻路算法最通俗易懂讲解(C语言完整实现+详细注释)
c语言·开发语言·算法
papaofdoudou4 小时前
初中数学-整数整除判定法全解:从 2 到 19 的方法、依据与证明
算法