2016-11-10 91 views
1

我有一個RSA公鑰/私鑰對和密碼。我正在嘗試解碼使用上述密鑰加密的文本。編碼的文本始終是512字符長的字母數字字符串。解碼用RSA編碼的文本

我已經用在SOF問題Decrypt using an RSA public key with PyCrypto

首先我用自己的私鑰這是從PEM文件編碼採用AES-256-CBC提供的代碼嘗試。 這是privkey.pem開始這讓我想到了AES-256加密

-----BEGIN RSA PRIVATE KEY----- 
Proc-Type: 4,ENCRYPTED 
DEK-Info: AES-256-CBC 
<rest of the data> 
-----END RSA PRIVATE KEY----- 

,但我收到以下錯誤消息。

ValueError: PEM encryption format not supported. 

所以我問源的私人密鑰沒有AES加密,他們給了我。現在,使用該密鑰解密的工作和解密的文字看起來像下面(我只是顯示一些文本)

b'\x93\n(\x92\x02\x9aF*?\x18"\x19\x12Gn\xc2\<rest of the text>' 

這不是我的純文本。我究竟做錯了什麼?有人可以幫我解碼這個文本。

編輯1:

基於以下馬騰的回答,我曾嘗試下面的代碼,但我仍然得到錯誤。

這裏是我的解密

from Crypto.Cipher import PKCS1_OAEP 
from Crypto.PublicKey import RSA 
import ast 

encrypted_text = "39085fc25e<HIDDEN>2fcce845760391ff" 

key = RSA.importKey(open("\\path_to_key\\private.der", encoding="utf8").read()) 
cipher = PKCS1_OAEP.new(key) 

message = cipher.decrypt(ast.literal_eval(str(uid))) 

代碼,我得到錯誤:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0x82 in position 1: invalid start byte 

請注意,我有我的私人密鑰轉換從PEM使用下面的代碼becasue使用PEM文件爲DER我是越來越SyntaxError: unexpected EOF while parsing

openssl rsa -in private_key.pem -out private_key.der -outform DER 

becasue

+0

我已經投了這個主題,因爲除了填充的想法,根本沒有足夠的信息繼續下去。嘗試使用測試鍵並在此處發佈所需的信息。 –

+0

我不確定你需要什麼額外的信息。我的鍵是用''openssl'''創建的,它們已經被使用了,所以我不能通過重新創建它們來改變它們。我得到了一個public_key.txt,private_key.pem(它是AES-256加密的)和密碼。如何使用python解密使用這些鍵的文本? –

+0

我使用.net c#代碼加密文本,並想使用python解密代碼,但我可以在哪裏獲取RSA.importKey? – Neo

回答

0

這是我找到的解決方案。

首先我使用pycryptodome librray而不是pycrypto。

以下是我的編碼和解碼功能。

from Crypto.Cipher import PKCS1_OAEP 
from Crypto.PublicKey import RSA 

def encode_rsa(message, key_path):  
    key = RSA.importKey(open(key_path).read()) 
    cipher = PKCS1_OAEP.new(key) 
    ciphertext = cipher.encrypt(message) 
    return ciphertext 

def decode_rsa(ciphertext, key_path): 
    key = RSA.importKey(open(key_path).read()) 
    cipher = PKCS1_OAEP.new(key) 
    # before decrypt convert the hex string to byte_array 
    message = cipher.decrypt(bytearray.fromhex(ciphertext)) 
    return message 

使用上述兩個函數,我能夠正確地編碼/解碼數據。