2017-11-29 4 views
0

PHPでAES暗号化された16進数のテキストを取得しました。これは以下の通りです:コードは以下の通りですPHPでAES暗号化のためにPythonで復号化する方法

<?php 
$str = "abcdefghijklmnopqrstuvwxyz"; 
$method = "aes-256-cbc"; 
$key = 'pqrstuvwxyz$abcdefghijAB'; 
$iv = 'DEFGHTABCIESPQXO'; 
echo bin2hex(openssl_encrypt($str, $method, $key, OPENSSL_RAW_DATA, $iv)); 
echo "\n"; 
?> 

2324ab5ec7a901247bf01b08bd1956688843dad5a8e15106ca3a5b9258918527

私はPythonスクリプトを作った:

import binascii 
from Crypto.Cipher import AES 

data = "abcdefghijklmnopqrstuvwxyz" 
key = "pqrstuvwxyz$abcdefghijAB" 
iv = "DEFGHTABCIESPQXO" 

encrypted = "2324ab5ec7a901247bf01b08bd1956688843dad5a8e15106ca3a5b9258918527" 

cipher = AES.new(key, AES.MODE_CBC, iv) 
decrypted = cipher.decrypt(binascii.unhexlify(encrypted)) 
print(decrypted) 

私はこれを持って、それは "ABCDEFGHIJKLMNOPQRSTUVWXYZ" と同じ文字列ではありません、 :

b' \xea\xbc\x13\x98!xw\x0c,\xac6\xeb\x1c\x14\\Z\x0b\x0fTY\xbe\x0b^W\xcem\xa4\x9ea\xde\x1b'

私はこのPythonのスクリプトのために解決したいエラー

decrypted.decode('utf-8') 

UnicodeDecodeError: 'utf-8' codec can't decode bytes in position 1-2: invalid continuation byte 

を得ました。

+1

256ビットのAESで192ビットのキーを使用しようとしていますが、これ以外の操作を行う前に修正​​します。 –

+0

非常にありがとう!私は32bitキーで解読できます。 – terapyon

答えて

0

修正PHPコード

$key = 'pqrstuvwxyz$abcdefghijAB12345678';

私は、新しい暗号化された文字列をされてしまった。その後

4a3d8b7449fb45c521b04314382670e9c4255682cde4fda51d715a3631718ccb

、私はキーのためのPythonコードを、修正

key = "pqrstuvwxyz$abcdefghijAB12345678"

私は以下を受け取りました。

b'abcdefghijklmnopqrstuvwxyz\x06\x06\x06\x06\x06\x06'

私は私が解決

unpad = lambda s: s[:-ord(s[len(s) - 1:])] unpad(decrypted).decode('utf-8')

を削除するために追加!