你的老师给你的:
公钥:(10142789312725007, 5)
意思是
n = 10142789312725007
e = 5
其中 n 是模数,e 是公共指数。
另外,给你
私钥:(10142789312725007, 8114231289041741)
意思是
d = 8114231289041741
其中 d 是应该保密的解密指数。
您可以通过了解如何将“n”分解为“p”和“q”质因数来“破解”RSA:
n = p * q
最简单的方法可能是检查从 n 的平方根以下开始的所有奇数:
Floor[Sqrt[10142789312725007]] = 100711415
您将在 4 次尝试中获得第一个因素:
10142789312725007 mod 100711415 = 100711367
10142789312725007 mod 100711413 = 100711373
10142789312725007 mod 100711411 = 100711387
10142789312725007 mod 100711409 = 0 <-- Winner since it evenly divides n
所以我们有
p = 100711409
现在,
q = n / p
= 10142789312725007 / 100711409
= 100711423
为什么这很重要?这是因为 d 是一个特殊的数字,因此
d = e^-1 mod phi(n)
= e^-1 mod (p-1)*(q-1)
我们可以验证这一点
d * e = 40571156445208705 = 1 mod 10142789111302176
这很重要,因为如果你有一个明文消息 m 那么密文就是
c = m^e mod n
然后你解密它
m = c^d = (m^e)^d = (m^(e*d)) = (m^(e*e^-1)) = m^1 (mod n)
例如,我可以使用您老师的公钥“加密”消息 123456789:
m = 123456789
这会给我以下密文:
c = m^e mod n
= 123456789^5 mod 10142789312725007
= 7487844069764171
(请注意,实际上“e”应该大得多,因为对于较小的“m”值,您甚至不会超过 n)
不管怎样,现在我们有了 "c" 并且可以用 "d" 反转它
m = c^d mod n
= 7487844069764171^8114231289041741 mod 10142789312725007
= 123456789
显然,您不能直接计算“7487844069764171^8114231289041741”,因为它有 128,808,202,574,088,302 位,因此您必须使用 modular exponentiation 技巧。
在“现实世界”中,n显然要大得多。如果您想查看 HTTPS 如何在幕后使用 RSA 的真实示例,其 n 为 617 位,e 为 65537,请参阅我的博文“@ 987654322@。”