gpt4 book ai didi

使用私有(private)指数和模数以 64 位 block 形式解密 RSA 加密文件的 Python 代码

转载 作者:行者123 更新时间:2023-11-30 23:13:10 27 4
gpt4 key购买 nike

我有一个加密文件,作为实验的一部分,我正在尝试对其进行解码。经过长时间的努力,我已经能够从公钥中提取出私有(private)指数,因为模数很小:

openssl rsa -pubin -inform PEM -text -noout < public_key.pem 公钥:(64 位) 模数:16513720463601767803 (0xe52c8544a915157b) 指数:65537

现在,我有:

 Factors: 3917781347 x 4215069449 
Private exponent: 9440767265896423601

现在,为了导出明文,我需要将每个 64 位密文 block 提升为私有(private)指数 mod 模数。我正在尝试编写一个 Python 脚本,以十六进制数据形式为我执行此操作。

这是我到目前为止的代码:

#!/usr/bin/python

file = open('encrypted.hex', 'r')
c = file.readline()
d = 0x830457cf1ae460b1
N = 0xe52c8544a915157b

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

f = open('new.try', 'w')
f.write(m)
f.close()

我使用xxd从密文文件中提取十六进制数据: xxd -p > 加密的.hex

这创建了名为“encrypted.hex”的文件的十六进制转储。该文件的内容如下所示:

7d4554292d7b9f980ed049cea0f968cf438b6fc312cf2028ce5ce2fe9f38
387b72a01bf6564f25884a2cacd187c2eeccd0cf78c2a74785f18d5e72b5
270ac3e45b6f7505347b38ec7684b1af206d73ea4a84cd59b50be56d7abf
74a569868406ab2b17846c9e448fe1392b21dac0b10fbb733536c99e598b
683be7400a1ad55c42faa171becd803b8b8f4a1fa512a33222ec042486c5
672f6200d4f00e2994b6d247a44edb6ce90795bde7ccda4433cf6fca8362
f87c68f9df6418c4f0b8fb9da39a1d173fea2b1466e646f01e2dc7fb0499
311d35ec75c15c5910b2d3e0c662de0b3b1716bab44faa2a36538bb44f6a
3c3abd37692cf95fa075b58485ad983533782d7bf51e10c0e3b18ccec972

...等等。我认为工具“xxd”创建了十六进制转储并插入了换行符。

因此,“c”是密文,“d”是私有(private)指数,“N”是,“m” ' 应该包含明文十六进制字节。

但是,该脚本给了我这个错误:

  Traceback (most recent call last):
File "final.py", line 8, in <module>
m = hex(pow(c, d, N)).rstrip("L")
TypeError: unsupported operand type(s) for pow(): 'str', 'long', 'long'

有人可以更正我的 Python 脚本,以便它能够根据需要解密密文吗?

最佳答案

假设c是一个16个字符倍数的十六进制字符串,则可以split it每 16 个字符(64 位),然后将其转换为 hex chunk into an int在上面运行教科书上的 RSA。由于您的十六进制文件有换行符,因此您首先需要 remove those line breaks 。您可以像使用 file.read() 而不是 file.readline() 那样读取整个文件。

最终代码

n = 16
c = c.replace('\n', '').replace('\r', '')
m = [hex(pow(int(c[i:i+n], 16), d, N)).rstrip("L") for i in range(0, len(c), n)]

f = open('new.try', 'w')
f.write(''.join(m))
f.close()

关于使用私有(private)指数和模数以 64 位 block 形式解密 RSA 加密文件的 Python 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29461923/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com