Глобальный PHP
Код: Выделить всё
$cipherType = 'AES-256-CBC';
$secretKey = '12345678-abcd-abcd-abcd-123456789012';
Код: Выделить всё
$value = "Joe";
$iv = random_bytes(16);
$cipherText = openssl_encrypt($value, $cipherType, $secretKey, OPENSSL_RAW_DATA, $iv);
$response = base64_encode(utf8_encode($iv . $cipherText));
//f8KxT07CgsKaJMK6HcK1w51xXcK6HW3DqcKFw6TCjShbw7PDv8KTQyfCvcOxZXrDnw==
Код: Выделить всё
$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
Код: Выделить всё
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