2012-05-10 6 views
4

PHP код:Шифрование в 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); 

Результат:

QBN0Yue3D9hBrBuD01n5KWG+lv2doMf97cKm/AeusAI= 

Как это может быть расшифрованы в Python?

+0

Смотрите эту связанный ответ: http://stackoverflow.com/a/8232171/623518 – Chris

+0

это анс расшифровывается с использованием режима ECB и не использует iv. Я хочу расшифровать в режиме CBC с помощью iv. – user812120

ответ

5

Попробуйте что-то вроде этого (Altho я действительно есть PyCrypto установлен)

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

Как на самом деле получить зашифрованное строковое значение из расшифрованы? Когда я пытаюсь, я получаю двоичные данные. Я пытаюсь decrypted = crypt_object.decrypt ('mydata hex'), но возвращает двоичный файл ... –

-7

Прочитано the manual, его довольно хорошо документировано.

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

Есть часть mcrypt. – jadkik94

+0

Ваш вопрос состоял в расшифровке результата base64. После шифрования что-то одним способом вы не можете его вернуть. Вот и все. – TJHeuvel

+0

'base64.decode' принимает два аргумента, поэтому ваш код поднимет' TypeError'. Я думаю, вы хотели использовать 'base64.b64decode' или' base64.decodestring'. Кроме того, что такое с двоеточием, и ваш ответ не расшифровывает декодированную строку. – Chris