2011-11-18 46 views
0

我有一些數據是在C++中使用aes_256_cbc使用OpenSSL加密的,我需要使用Python解密它。我想到了使用M2Crypto,作爲OpenSSL的包裝應該使這容易,但我沒有得到相同的數據。Python的M2Crypto.EVP.Cipher不能與C++加密數據配合使用

我讀過test_AES code,它沒有幫助。我正在收集數據,這只是不正確的數據。

c = Cipher(alg='aes_256_cbc', key=binaryKey, iv=iv, op=0, d='sha256', i=5, salt=knownSalt, padding=0) 
v = c.update(binaryDataToDecrypt) 
v += c.final() 

在這一點上,據我所知,V應該是我的數據,這是不是...我發現另一個Q here on SO其中提及的是,前16個字節的數據的解密是鹽,所以我也試着與沒有運氣以下:

c = Cipher(alg='aes_256_cbc', key=binaryKey, iv=iv, op=0, d='sha256', i=5, salt=binaryDataToDecrypt[0:16], padding=0) 
v = c.update(binaryDataToDecrypt[16:]) 
v += c.final() 
+0

AES/CBC中沒有鹽。雖然它可能是它與密碼(和散列函數/迭代計數)一起使用來派生密鑰......不過,不瞭解OpenSSL/M2Crypto。顯示用於加密的代碼可能會有所幫助。 –

回答

0

這樣提到割掉前16個字節我聯繫的問題可能已經針對不同的實現。事實證明,我必須切掉最後的16個字節。在將數據轉換爲二進制格式後,您還必須確保將這16個字節切片,以便它確實爲16 字節

另外,正如Paulo在評論中所述,AES不會「不要使用鹽,這樣參數應該留給默認值。

相關問題