Python 使用大密钥的RSA解密

Python 使用大密钥的RSA解密,python,math,encryption,rsa,large-data,Python,Math,Encryption,Rsa,Large Data,我的问题是:我已经知道RSA系统的私钥和公钥,我有一个加密的消息,但我不能解密它,因为我的私钥指数大约是1024位。如果需要详细信息,我的数据如下,但问题是如何在简单的家用PC上用长密钥解密消息 N = 0xb197d3afe713816582ee988b276f635800f728f118f5125de1c7c1e57f2738351de8ac643c118a5480f867b6d8756021911818e470952bd0a5262ed86b4fc4c2b7962cd197a8bd8d8a

我的问题是:我已经知道RSA系统的私钥和公钥,我有一个加密的消息,但我不能解密它,因为我的私钥指数大约是1024位。如果需要详细信息,我的数据如下,但问题是如何在简单的家用PC上用长密钥解密消息

N = 0xb197d3afe713816582ee988b276f635800f728f118f5125de1c7c1e57f2738351de8ac643c118a5480f867b6d8756021911818e470952bd0a5262ed86b4fc4c2b7962cd197a8bd8d8ae3f821ad712a42285db67c85983581c4c39f80dbb21bf700dbd2ae9709f7e307769b5c0e624b661441c1ddb62ef1fe7684bbe61d8a19e7
e = 65537
p = 0xc315d99cf91a018dafba850237935b2d981e82b02d994f94db0a1ae40d1fc7ab9799286ac68d620f1102ef515b348807060e6caec5320e3dceb25a0b98356399
q = 0xe90bbb3d4f51311f0b7669abd04e4cc48687ad0e168e7183a9de3ff9fd2d2a3a50303a5109457bd45f0abe1c5750edfaff1ad87c13eed45e1b4bd2366b49d97f
d = 0x496747c7dceae300e22d5c3fa7fd1242bda36af8bc280f7f5e630271a92cbcbeb7ae04132a00d5fc379274cbce8c353faa891b40d087d7a4559e829e513c97467345adca3aa66550a68889cf930ecdfde706445b3f110c0cb4a81ca66f8630ed003feea59a51dc1d18a7f6301f2817cb53b1fb58b2a5ad163e9f1f9fe463b901
c = 0x58ae101736022f486216e290d39e839e7d02a124f725865ed1b5eea7144a4c40828bd4d14dcea967561477a516ce338f293ca86efc72a272c332c5468ef43ed5d8062152aae9484a50051d71943cf4c3249d8c4b2f6c39680cc75e58125359edd2544e89f54d2e5cbed06bb3ed61e5ca7643ebb7fa04638aa0a0f23955e5b5d9
其中
c
是密文,
N
是模,
e
d
分别是公共和私有指数,
p
q
是素数(我想是这样,但很难检查)

我已经尝试过使用在线服务,比如和其他一些服务。 同样在我的电脑上,我也使用过,但它出现了错误。 我假设以下公式到处都使用(假设
m
代表纯文本):

因此,从数学的角度来看,也许有一种更聪明的方法可以更快地计算这个
m
,或者有一个在线服务可以解决这个问题,或者有一个图书馆。或者只有超级计算机才能计算1024位指数RSA解密


数据取自CTF上下文picoctf。

首先,我真的希望(a)这不是重要的信息,(b)你不会再使用这个密钥对,因为我现在可以解密这个密文和任何其他发送给你的加密消息

我们可以用python解码消息(生成十六进制编码字符串),如下所示:

m = hex(pow(c, d, N)).rstrip("L")

0x436F6E677226174756C6174696F6E73206F6E20646563727970774696E6720616E20525341206D6573361676521205966F757220666C6167206973206D6F64756C61725F61726974686D6576463735F6E6F745F736F5661645F61645F61667465725F616C66C


内置的
pow
函数用于高效地计算整数的大幂。如果没有平方求幂及其变体,任何依赖于离散对数问题的非对称密钥算法(这是大多数,但不是全部)的使用都是不可行的。它实际上很容易实现,我强烈建议您这样做。有关更多信息,请阅读维基百科文章。

Super!这正是我所寻找的,我以前从未听说过这个数学技巧,非常有用。正如我所写的,数据来自上下文,因此不会被使用,而信息只用于游戏——没有什么重要的。
m = 1
for i in xrange(d):
    m = (m * c) % N
m = hex(pow(c, d, N)).rstrip("L")