AES-256-CBC Python расшифровывает данные, зашифрованные с помощью PHP openssl_encrypt. Полный примерPhp

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 AES-256-CBC Python расшифровывает данные, зашифрованные с помощью PHP openssl_encrypt. Полный пример

Сообщение Anonymous »

Наш PHP шифруется таким образом, что я не могу расшифровать его с помощью Python.
Глобальный PHP

Код: Выделить всё

$cipherType = 'AES-256-CBC';
$secretKey = '12345678-abcd-abcd-abcd-123456789012';
Шифрование PHP (комментарий показывает $response [зашифровано])

Код: Выделить всё

$value = "Joe";
$iv = random_bytes(16);
$cipherText = openssl_encrypt($value, $cipherType, $secretKey, OPENSSL_RAW_DATA, $iv);
$response = base64_encode(utf8_encode($iv . $cipherText));
//f8KxT07CgsKaJMK6HcK1w51xXcK6HW3DqcKFw6TCjShbw7PDv8KTQyfCvcOxZXrDnw==
Расшифровка PHP (комментарий показывает $response [расшифрованный])

Код: Выделить всё

$value='f8KxT07CgsKaJMK6HcK1w51xXcK6HW3DqcKFw6TCjShbw7PDv8KTQyfCvcOxZXrDnw=='
$cipherData = utf8_decode(base64_decode($value));
$iv = mb_substr($cipherData, 0, 16, '8bit');
$cipherText = mb_substr($cipherData, 16, null, '8bit');
$response = openssl_decrypt($cipherText, $cipherType, $secretKey, OPENSSL_RAW_DATA, $iv);
//Joe
Я пытался расшифровать с помощью Python

Код: Выделить всё

from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes

IV_LENGTH=16
secret_key = '12345678abcdabcdabcd123456789012'.encode('utf-8')
cipher_data = 'f8KxT07CgsKaJMK6HcK1w51xXcK6HW3DqcKFw6TCjShbw7PDv8KTQyfCvcOxZXrDnw=='
decoded = base64.b64decode(cipher_data)
iv = decoded[:IV_LENGTH]
cipher_text = decoded[IV_LENGTH:]
decrypt_cipher = AES.new(secret_key, AES.MODE_CBC, iv)
plain_text = decrypt_cipher.decrypt(cipher_text) #ValueError: Data must be padded to 16 byte boundary in CBC mode
plain_text.decode('utf-8')
выход:

Код: Выделить всё

print('iv {}'.format(iv)) #iv b'\x7f\xc2\xb1ON\xc2\x82\xc2\x9a$\xc2\xba\x1d\xc2\xb5\xc3'
print('cipher_text {}'.format(cipher_text)) #cipher_text b"\x9dq]\xc2\xba\x1dm\xc3\xa9\xc2\x85\xc3\xa4\xc2\x8d([\xc3\xb3\xc3\xbf\xc2\x93C'\xc2\xbd\xc3\xb1ez\xc3\x9f"

ValueError: Data must be padded to 16 byte boundary in CBC mode
Примечания:
У меня нет возможности изменить шифрование PHP.
Я предполагаю, что PHP удалял - из $secretKey, Python не разрешал их и выдавал ошибку, например: ValueError: неверная длина ключа AES (36 байт)
Чего мне не хватает в моем Python для расшифровки?
Может ли проблема заключаться в том, что я не дополнил данные в PHP, а PHP просто более либерален?
Или может ли это быть быть openssl_encrypt в PHP, дополняет его под капотом, и мне нужно дополнить/развернуть расшифровку Python?

Подробнее здесь: https://stackoverflow.com/questions/783 ... ll-example
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Зашифрованные данные AES-256-CBC IONIC не могут быть расшифрованы в PHP.
    Anonymous » » в форуме Php
    0 Ответы
    29 Просмотры
    Последнее сообщение Anonymous
  • Как зашифровать открытый текст с помощью AES-256 CBC в PHP с помощью OpenSSL?
    Anonymous » » в форуме Php
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Php openssl_encrypt (aes-256-cbc) к node.js cryptojs.aes.decrypt приводит к пустой строке
    Anonymous » » в форуме Php
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • PHP Openssl расшифровывает шифрование AES Mysql
    Гость » » в форуме Php
    0 Ответы
    21 Просмотры
    Последнее сообщение Гость
  • Aes-256-cbc чувствителен через URL-адрес в PHP
    Гость » » в форуме Php
    0 Ответы
    32 Просмотры
    Последнее сообщение Гость

Вернуться в «Php»