2012-05-10 19 views
4

PHPコードを復号化:暗号化、Pythonで

$key = "12345678abcdefgh12345678abcdefgh"; 
$iv = "12345678abcdefgh"; 
$plaindata = "This is a test string."; 

$enc = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $plaindata, MCRYPT_MODE_CBC, $iv)); 

echo($enc); 

結果:これはPythonで復号化することができますか

QBN0Yue3D9hBrBuD01n5KWG+lv2doMf97cKm/AeusAI= 

+0

は、この関連の回答を参照してください。後でそれを削除する必要があります。http://stackoverflow.com/a/8232171/623518は、それは、ANS – Chris

+0

ECBモードを使用して復号化され、ivは使用されません。私はivを使ってCBCモードで解読したい。 – user812120

答えて

5

この(私はPyCryptoがインストールされていないaltho)のようなものを試してみてください

from Crypto.Cipher import AES 
import base64 

AES.key_size=128 
iv="your iv" 
key="your key" 
crypt_object=AES.new(key=key,mode=AES.MODE_CBC,IV=iv) 

decoded=base64.b64decode(plain) # your ecrypted and encoded text goes here 
decrypted=crypt_object.decrypt(decoded) 

これは、デコードされたテキストをもたらすでしょうが、それは16

のサイズの倍数であることがバイトで埋められます

あなたはおそらく正しいパディング方式を決定し、それに応じて

+0

ありがとうございました。誰かがPyCryptoのインストールに悩まされている場合は、ここをクリックしてください。http://apprenticealf.wordpress.com/2011/01/14/windows-python-ebooks-and-drm/ – user812120

+1

実際に暗号化された文字列値を取得する方法解読?私がそれを試しているとき、私はバイナリデータを取得しています。私は解読しようとしています= crypt_object.decrypt( 'mydata hex')しかしバイナリを取得しています... –

-7

the manualは、かなりよく文書化されています。

data = base64.b64decode('QBN0Yue3D9hBrBuD01n5KWG+lv2doMf97cKm/AeusAI=') 
+0

mcryptの部分があります。 – jadkik94

+0

あなたの質問は、base64の結果を解読することでした。あなたはそれを元に戻すことができない何かを暗号化した後。それはその点です。 – TJHeuvel

+0

'base64.decode'は2つの引数を取るので、あなたのコードは' TypeError'を送出します。私はあなたが 'base64.b64decode'または' base64.decodestring'を使うつもりであると思います。また、セミコロンとは何ですか、あなたの答えはデコードされた文字列を解読しません。 – Chris