Python中的RSA算法2025 年 1 月 5 日 | 阅读 10 分钟 非对称加密算法是 RSA 算法。实际上,非对称性指的是它同时作用于公钥和私钥。正如名称所示,私钥是保密的,而公钥则分发给所有人。 非对称加密示例
由于这是非对称的,即使其他人拥有浏览器的公钥,也只有浏览器本身能够解码数据。 原理! 大整数难以分解是 RSA 原理的基础。公钥由两个数字组成,其中一个是由两个大素数相乘得到的。私钥也是由这两个素数生成的。因此,如果大整数能够被分解,私钥就会泄露。结果,密钥的长度决定了加密的强度,并且随着密钥长度的加倍或三倍,加密的强度会呈指数级增长。RSA 密钥通常为 2048 或 1024 位长,但专家预测 1024 位密钥很快就会被破解。然而,目前来看这似乎是不可能完成的任务。 现在我们来分析 RSA 算法的工作原理
我们现在准备好了我们的私钥 (d = 2011) 和公钥 (n = 3127 和 e = 3)。现在我们将加密 "HI" 下面展示了 RSA 算法的实现 方法 1加密和解密小数值。 输出 Message data = 12.000000 Encrypted data = 3.000000 Original Message Sent = 12.000000 方法 2使用每个字母和数字的 ASCII 值来加密和解码明文消息 输出 Initial message: Test Message The encoded message(encrypted by public key) 863312887135951593413927434912887135951359583051879012887 The decoded message(decrypted by private key) Test Message 使用本原根的 RSA 密码系统在 C++ 中实现我们将以一种基本的方式使用本原根来实现 RSA。 步骤 1:生成密钥 首先,我们必须生成两个大素数 p 和 q。这两个素数的乘积,应该比我们要加密的消息稍大,并且长度大致相等。 任何素性测试算法,例如 Miller-Rabin 测试,都可以生成素数。获得两个素数后,我们可以计算它们的乘积 n = p*q,这构成了我们 RSA 系统的模。 为了计算 gcd(e, phi(n)) = 1,我们必须选择一个整数 e,使其满足 1 < e < phi(n),其中 phi(n) = (p-1)*(q-1) 是欧拉的 totient 函数。此值 e 将是公钥指数。 为了计算私钥指数 d,我们必须找到一个整数 d,使得 d*e = 1 (mod phi(n))。您可以通过应用扩展欧几里得算法来完成此操作。 我们的公钥是 (n, e),私钥是 (n, d)。 步骤 2:加密 消息 m 必须转换为介于 0 和 n-1 之间的整数才能被加密。UTF-8 或 ASCII 等可逆编码方案可用于此目的。 获得消息的整数表示后,我们使用公式 c = m^e (mod n) 计算密文 c。二进制指数运算是可用于此目的的有效模幂运算算法之一。 步骤 3:解密 为了解密密文 c,我们计算明文 m 为 m = c^d (mod n)。同样,模幂运算算法使我们能够快速完成此任务。 步骤 4:示例 让我们通过一个例子来展示 RSA 密码系统如何使用小数字来运行。 假设我们选择 p = 11 和 q = 13,得到的 n = 143 和 phi(n) = 120。鉴于 gcd (7, 120) = 1,我们可以选择 e = 7。由于 7*103 = 1 (mod 120),我们可以使用扩展欧几里得算法计算 d = 103。 我们的公钥是 (143, 7),私钥是 (143, 103)。 假设我们想加密 "HELLO" 消息。使用 ASCII 编码,我们可以将其转换为数字 726564766。我们使用公钥计算密文为 c = 726564766^7 (mod 143) = 32。 使用私钥,我们可以通过计算原始消息 m = 32^103 (mod 143) = 726564766 来解密密文。 示例代码 程序说明 这个 C++ 程序实现了 RSA (Rivest-Shamir-Adleman) 密码系统,这是一个流行的非对称加密技术。它在计算给定复合数 'n' 的欧拉 totient 函数 (phi) 后,会生成一个模 'n' 的随机本原根。该软件会计算一个由 'd' 和 'n' 组成的私钥,以及一个由 'e' 和 'n' 组成的公钥。通过将消息 'm' 的 'e' 次幂模 'n' 以及密文 'c' 的 'd' 次幂模 'n' 分别计算,可以展示加密和解密的工作原理。为了说明 RSA 加密和解密过程,程序会打印出原始消息、加密消息和解密消息。 输出 Public key: {3, 3233} Private key: {2011, 3233} Original message: 123456 Encrypted message: 855 Decrypted message: 123456 优点
缺点
下一主题Isomap |
?在Linux系统中,需要检查特定内容是否正在运行的情况并不少见。这对于各种目的都很有用,例如监控、确保单实例执行或根据内容的状况执行活动。Python提供了多种方式...
阅读 6 分钟
字谜是一种文学手法。在这种手法中,如果两个词中的字母是另一个词重新排列的字母,则这两个词被称为彼此的字谜。因此,两个词的字母列表应该相同。为了...
7 分钟阅读
如果您对 Web 编程感兴趣,您可能已经遇到过缩写 MVC,代表 Model-View-Controller。由于许多 Python 在线框架甚至桌面应用程序都使用它,您可能知道它是一种流行的设计模式。但它到底意味着什么?如果……
7 分钟阅读
Python 文件处理简介 Python 的文件处理系统允许永久存储二进制数据,如图像和可执行文件。它提供了读取、写入、追加和删除文件的有效方法,并以二进制或文本模式处理它们。可以通过...
阅读 3 分钟
什么是 OpenBB Platform?OpenBB Platform 是一个先进的开源金融分析环境,专为专家和爱好者而设计。OpenBB 因其模块化特性而脱颖而出,这使其能够非常灵活地满足用户需求。无论您是在寻找...
40 分钟阅读
Pulp 广泛应用于运筹学、金融、能源、电信、交通和物流、医疗保健、制造等众多领域,在本教程中,我们将重点介绍如何使用 pulp 在 Python 中进行线性规划。本教程涵盖的内容包括:一个...
阅读 4 分钟
? 简介:在本教程中,我们了解到 Python 字典中的一个键可以包含一个或多个值。字典是 Python 数据结构的表示,可以看作是 C++ 中映射的类似物。它是一个动态数据结构,可以...(此段落未提供完整的英文原文,故翻译不完整)
7 分钟阅读
在数据驱动决策的技术中,创建交互式仪表板的能力非常有用。Python 作为一种强大灵活的编程语言,提供了多种程序,可以帮助您有效地构建动态和交互式仪表板。在本文中,我们将探讨 4 种最流行的...
阅读 10 分钟
Weightipy:它是什么?在处理调查或普查数据时,Weightipy 库可用于对个人数据进行加权计算。它支持最新版本的 NumPy 和 Pandas,比 Quantipy 更有效地处理加权,并且运行速度更快。RIM...
7 分钟阅读
理解绑定和监听过程对于在使用 Python 套接字建立网络通信至关重要。让我们仔细看看细节。网络是通过连接在设备之间交换信息。由于套接字是设备在本地或广域网上以及设备之间发送消息的关键...
阅读 13 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India