Files
2025-09-25 04:06:06 +08:00

63 lines
2.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
### RSA 算法原理
RSA 算法是一种非对称加密算法,它的名字来源于三位发明者 Rivest、Shamir 和 Adleman 的姓氏首字母。与对称加密不同,非对称加密使用一对密钥:**公钥**和**私钥**。公钥可以公开给任何人,用于加密数据;而私钥必须由用户自己保管,用于解密数据。RSA 的核心在于利用了两个数学难题:**大整数质因数分解**和**欧拉函数**
**密钥生成过程**
密钥生成是 RSA 算法的基础,这个过程决定了公钥和私钥的值
1. **选择大质数**:随机选择两个非常大的质数 p 和 q。为了确保安全性,这两个质数必须足够大且不能太接近
2. **计算模数**:计算它们的乘积 `n=p×q`。这个 n 就是 RSA 的模数,它既是公钥的一部分,也是私钥的一部分
3. **计算欧拉函数**:计算欧拉函数 `ϕ(n)=(p1)(q1)`。欧拉函数 ϕ(n) 表示小于或等于 n 且与 n 互质的正整数的个数
4. **选择公钥指数**:选择一个整数 e,它必须满足以下条件:
- `1<e<ϕ(n)`
- e 与 ϕ(n) 互质(即最大公约数为 1)
通常,为了计算效率,会选择一些常见的质数,比如 65537。这个 e 就是公钥的指数
5. **计算私钥指数**:计算一个整数 d,它必须满足以下条件:
- `d × e ≡ 1 (mod ϕ(n))`
这个等式意味着 `d × e` 除以 ϕ(n) 的余数为 1。我们可以使用扩展欧几里得算法来高效地找到这个 d。这个 d 就是私钥的指数
至此,密钥生成完成。**公钥为 (n,e)**,可以公开;**私钥为 (n,d)**,必须严格保密
**加密和解密过程**
有了公钥和私钥,就可以进行数据的加密和解密了
**加密**
假设发送方想向你发送一条消息 M
1. 发送方获取你的公钥 (n,e)
2. 将明文消息 M 转换为一个整数(通常通过 ASCII 或其他编码方式)
3. 使用公钥进行加密,计算密文 C
`C = Me (mod n)`
**解密**
当接收方收到密文 C 后,就可以使用自己的私钥进行解密
1. 接收方使用自己的私钥 (n,d)
2. 使用私钥进行解密,计算出原始明文 M:
`M = C^d (mod n)`
这里看起来很简单,但其背后的数学原理是:
```
(M^e)^d ≡ M^ed ≡ M (mod n)
```
这正是**欧拉定理**在起作用,它保证了加密和解密的可逆性