我有一個加密文件,我嘗試將其解碼爲實驗的一部分。努力工作,不久之後,我已經能夠從公鑰中提取專用指數自模量小:使用私有指數和模數以64位塊解密RSA加密文件的Python代碼
OpenSSL的RSA -pubin -inform PEM -text -noout < public_key.pem 公鑰:( 64位) 模量:16513720463601767803(0xe52c8544a915157b) 指數:65537
現在,我有:
Factors: 3917781347 x 4215069449
Private exponent: 9440767265896423601
現在,以導出明文,我需要密文的每個64位塊提升到私人指數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> 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腳本,以便它能夠根據需要破譯密文?
強制性大限通知:教科書RSA是可怕的破碎並且必須使用諸如OAEP適當的填充方案。小於2048位的密鑰不推薦用於嚴重的事情。 – 2015-04-05 20:52:19
包含密文的文件太大,並且包含換行符(\ n)。所以,readline只讀一行我認爲,因爲我只看到一行作爲明文輸出。如何讀取整個密文文件,刪除換行符(\ n)字符? – learnerX 2015-04-05 21:02:00
完成!您在編輯中看到的這個hexdump已經使用工具'xxd -p'進行了處理。它在我認爲的地方插入了換行符。這個hexdump來自.enc(加密)文件,我需要以64位的塊解密。 – learnerX 2015-04-05 21:10:08