进行解密使用私有指数和弹性模量中的64位的块RSA加密文件Python代码(Python code

2019-10-22 12:50发布

我有我试图解码作为实验的一部分的加密文件。 努力工作,不久之后,我已经能够从公开密钥,因为模量小提取专用指数:

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

我现在有:

 Factors: 3917781347 x 4215069449 
 Private exponent: 9440767265896423601

现在,为了得到明文,我需要的密文的每个64位块提高到专用指数国防部模量。 我想写一个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> encrypted.hex

这造成了所谓的“encrypted.hex”文件的十六进制转储。 这个文件的内容开始是这样的:

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

...等等。 该工具“XXD”创建hexdump都和插入换行符我想。

所以,“C”是ciphertext ,“d”为所述private exponent ,“N”是在modulus和“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脚本,以便它能够根据需要破译密文?

Answer 1:

假设c是一个十六进制字符串的16个字符的倍数,你可以把它分解每16个字符(64位),然后将此转换十六进制块为一个int在其上运行您的教科书RSA。 由于您的十六进制文件有换行符,您需要先删除这些换行符 。 你可以阅读整个文件像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()


文章来源: Python code that decrypts RSA encrypted file in chunks of 64 bit using a private exponent and modulus