关于 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 = 4c = 16(用公钥)
解密 c = 16m = 4(用私钥)
相关推荐
Xの哲學21 分钟前
hostapd状态机解析
linux·网络·算法·wireless
kukubuzai1 小时前
搜索二叉数(c++)
算法
快手技术1 小时前
效果 & 成本双突破!快手提出端到端生成式推荐系统 OneRec!
算法
HNU混子1 小时前
leetcode-3443. K次修改后的最大曼哈顿距离
算法·leetcode·动态规划
东方芷兰2 小时前
Leetcode 刷题记录 19 —— 动态规划
算法·leetcode·动态规划
奔跑吧邓邓子2 小时前
解锁决策树:数据挖掘的智慧引擎
人工智能·算法·决策树·机器学习·数据挖掘
蓝纹绿茶2 小时前
【本机已实现】使用Mac部署Triton服务,使用perf_analyzer、model_analyzer
人工智能·算法·macos·机器学习
范纹杉想快点毕业2 小时前
Qt实现文本编辑器光标高亮技术
java·开发语言·c++·算法·系统架构
C羊驼2 小时前
C语言:二分搜索函数
算法
胡乱编胡乱赢3 小时前
最小化联邦平均(FedAvg)的算法开销
算法·最小化联邦平均·联邦平均