RSA加密算法全步骤揭秘:从原理到Python代码实现解密
以下是对RSA加密算法步骤的详细解释以及实现解密功能的Python代码。 RSA加密算法步骤 1. 密钥生成 - 选取两个大素数 $p$ 和 $q$。 - 计算 $n = p \times q$。 - 计算欧拉函数 $\varphi(n)=(p - 1)\times(q - 1)$。 - 选取一个整数 $e$,满足 $1 < e < \varphi(n)$ 且 $\gcd(e,\varphi(n)) = 1$,其中 $\gcd$ 表示最大公约数。此时 $(n, e)$ 构成公钥。 - 计算 $e$ 关于 $\varphi(n)$ 的模逆元 $d$,即满足 $e\times d\equiv 1\pmod{\varphi(n)}$,此时 $(n, d)$ 构成私钥。 2. 加密过程 - 将明文消息 $m$ 转换为数字串 $m_1, m_2, \cdots, m_k$。 - 对于每个数字 $m_i$,计算密文 $c_i = m_i^e\bmod n$。 3. 解密过程 - 对于每个密文 $c_i$,计算明文 $m_i = c_i^d\bmod n$。 Python代码实现 ```python # 扩展欧几里得算法,用于计算模逆元 def extended_gcd(a, b): if a == 0: return (b, 0, 1) else: g, y, x = extended_gcd(b % a, a) return (g, x - (b // a) * y, y) # 计算模逆元 def mod_inverse(e, phi): g, x, _ = extended_gcd(e, phi) if g != 1: raise Exception('Modular inverse does not exist') else: return x % phi # RSA解密函数 def rsa_decrypt(ciphertext, n, d): plaintext = [] for c in ciphertext: # 计算明文 m = c^d mod n m = pow(c, d, n) plaintext.append(m) return plaintext # 样例输入 input_str = "60 4 121 99 98 121 45 39 98 119 45 45 4 80 110" ciphertext = [int(x) for x in input_str.split()] # 假设公钥 (n, e) 和私钥 (n, d) 已知 # 这里需要根据实际情况提供 n, e, d 的值 # 示例中假设已经知道 n 和 d n = 133 e = 7 p = 7 q = 19 phi = (p - 1) * (q - 1) d = mod_inverse(e, phi) # 解密 plaintext = rsa_decrypt(ciphertext, n, d) # 输出解密后的明文 print("解密后的明文数字串:", plaintext) ``` 代码解释 1. extended_gcd 函数:实现扩展欧几里得算法,用于计算两个数的最大公约数以及对应的贝祖系数。 2. mod_inverse 函数:调用扩展欧几里得算法计算 $e$ 关于 $\varphi(n)$ 的模逆元 $d$。 3. rsa_decrypt 函数:对输入的密文数字串进行解密,通过 $m = c^d\bmod n$ 计算明文。 4. 主程序:读取输入的密文数字串,假设已经知道公钥 $(n, e)$ 和私钥 $(n, d)$,调用 `rsa_decrypt` 函数进行解密并输出结果。 注意事项 - 在实际应用中,需要根据具体情况提供正确的 $p$、$q$、$e$ 值来生成公钥和私钥。 - 为了保证安全性,$p$ 和 $q$ 应该是足够大的素数。 ######[AI问答 | 948点数解答 | 2026-01-25 21:12:39]
- Python 运行报错:urllib3 网络连接创建失败,原因及排查建议(字节豆包 | 161点数解答 | 2024-10-31 00:39:36)458
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)343
- Python实现AES加密解密:含代码示例与关键注意点(字节豆包 | 836点数解答 | 2025-10-14 16:35:32)66
- Python 在 Windows 系统下编程实现 RSA 算法对照片加密与解密(字节豆包 | 373点数解答 | 2025-01-05 18:35:28)360
- Python 在 Windows 系统下编程实现 RSA 算法对照片加密与解密:附代码及注意事项(GPT | 1269点数解答 | 2025-01-05 18:37:09)244
- Python在Windows系统下实现RSA算法对手写签名照片加密解密,附代码及关键逻辑 (GPT | 786点数解答 | 2025-01-05 18:37:20)306
- Python 实战:学生信息列表转字典、遍历、深拷贝及数据修改全流程(GPT | 422点数解答 | 2024-10-29 15:43:54)414
- Python实战:学生成绩列表转字典,深拷贝与数据修改操作全解析(字节豆包 | 254点数解答 | 2024-10-29 16:01:39)405
- PyCharm 中用 Selenium 编写自动化测试脚本,轻松登录 eShop 测试平台并点击“我的订单”(字节豆包 | 304点数解答 | 2024-11-06 15:38:30)430
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)310
- Python实现RSA私钥加密公钥解密:代码示例与注意要点(字节豆包 | 3252点数解答 | 2025-08-28 20:28:08)91
- 用 JS 中 for 循环实现 1 到 100 相加并输出结果到页面的完整代码 ( | 240点数解答 | 2024-05-20 22:11:29)457