Эквивалент Python des-ede-cbc

В настоящее время у меня есть шифрование и дешифрование для 3DES (des-ede-cbc) в PHP следующим образом:

php > $key = '0000000000000000';
php > $iv = '00000000';
php > $plaintext = '1234567812345678';
php > $ciphertext = openssl_encrypt($plaintext, 'des-ede-cbc', $key, 0, $iv);
php > echo $ciphertext;
LEvEJf9CI+5VTVNeIjARNamKH+PNTx2P

php > $plaintext = openssl_decrypt($ciphertext, 'des-ede-cbc', $key, 0, $iv);
php > echo $plaintext;
1234567812345678

Мне нужно иметь возможность взять зашифрованный текст и расшифровать его на python. Самым близким, что я нашел, является pycrypto: https://gist.github.com/komuw/83ddf9b4ae8f995f15af

Моя попытка:

>>> key = '0000000000000000'
>>> iv = '00000000'
>>> cipher_decrypt = DES3.new(key, DES3.MODE_CBC, iv)
>>> plaintext = cipher_decrypt.decrypt('LEvEJf9CI+5VTVNeIjARNamKH+PNTx2P')
>>> plaintext
b']v\xdf\xa7\xf7\xc0()\x08\xdf\xcb`4\xa7\x10\x9e\xaf\x8c\xb6\x00+_\xb3?2\x1d\\\x08\x01\xfa\xf2\x99'

Я не уверен, что он делает по-другому. Это 3DES с режимом CBC. Я не совсем уверен, что означает часть ede, но я не могу найти ничего, чтобы подражать именно этому режиму openssl.

Информация о версии:
Python 3.6.5
PHP 7.1.3

2

Решение

Строка, которую вы получаете из PHP, закодирована в base64.

from Crypto.Cipher import DES3
from base64 import decodebytes

key = b'0000000000000000'
iv = b'00000000'

cipher_decrypt = DES3.new(key, DES3.MODE_CBC, iv)
plaintext = cipher_decrypt.decrypt(decodebytes(b'LEvEJf9CI+5VTVNeIjARNamKH+PNTx2P'))

print(plaintext.decode("utf-8"))

>>>1234567812345678
2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector