【发布时间】:2018-02-13 18:12:15
【问题描述】:
我今天一直在研究RSA算法的概念,我是这么理解的。
生成密钥对 -
- 两个素数(例如 p1 = 53,p2 = 59)相乘以生成
n(将用作公共模数) - 我们在
n变量上使用 Euler 的 totient 函数并定义一个新变量phi。 - 我们生成一个公共指数
e,条件是它必须是小的奇数,不与我们的phi变量共享因子。 -
私钥
d是从这个公式生成的:或
d = (k * (phi(n)) + 1) / e。 -
我们用数字替换变量并得到私钥:
或
d = (2 * (3016) + 1) / 3 = 2011我们替代 -
k和2(据我所知,k必须大于 0 且小于phi(n))phi(n)和3016(因为p1 * p2 = 3127和因为结果 是一个素数,我们很容易使用p1和p2得到它的phi。 (phi(n) = (p1-1) * (p2-1))-
e与3的指数(因为它与 3016 不共享任何因数,并且是奇数)
使用公钥 -
之后我们可以分享我们的e 和n,因为计算机需要几十年才能从大n 获取私钥。
我们的通信器将消息编码为十六进制,然后将其转换为 base10 整数。 Communicator 还可以添加随机整数填充以进行保护。
当消息转化为数字时,对其进行模幂运算:
[![在此处输入图片描述][3]][3]
例如,如果数字中的消息是 89,如果我们对其进行模幂运算,我们将得到:
1394
问题 -
如果我们的通讯器向我们发送1394,它是加密的89 (89^3 * mod(59 * 53) = 1394),我们如何使用我们的私钥自动解密此消息?是否有一些必须使用的特定公式?
非常感谢您的阅读。
【问题讨论】:
-
crypto.stackexchange.com 可能更适合您的问题。
-
加密后的值是 916,而不是 89。1394 ^ 3 % 3127。
-
啊。我将“1394 加密为 89”解释为“1394 加密为 89”。
-
这是指数,但我当然不能在没有 BigInteger 类的情况下使用
1394 ^ 2011,因为 64 位不足以容纳它。
标签: algorithm math encryption rsa