Результаты работы аналогичного кода на PHP и Python не совпадают

Работаю над API-интеграцией с системой, написанной на PHP. Мне нужно, чтобы мой код на Python создавал точно такую же строку, как приведенный ниже PHP код. Однако я не смог получить совпадение результатов.

<?php
function encrypt_payload($payload, $test_id, $test_secret, $test_iv){
    $cipher = "AES-128-CTR";
    $iv_length = openssl_cipher_iv_length($cipher);
    $options = 0;
    $encryption_key = md5($test_id . $test_secret);
    $encoded_payload = base64_encode($payload);
    $encryption = base64_encode(openssl_encrypt($encoded_payload, $cipher, $encryption_key, $options, $test_iv));
    return $encryption;
}

$payload = json_encode(["first_name" => "Ivan", "last_name" => "Ivanov"]);
$test_id = "1111";
$test_secret = "45321d6";
$test_iv = "BFB0503C7DA3C32B";

$encrypted = encrypt_payload($payload, $test_id, $test_secret, $test_iv);
echo "Encrypted: " . $encrypted;
?>

Одна из моих попыток реализации на python:

import json
import hashlib
import base64
from Crypto.Cipher import AES


def encrypt_payload(payload, test_id, test_secret, test_iv):
    simple_string = base64.b64encode(payload.encode()).decode()
    encryption_key = hashlib.md5(f"{test_id}{test_secret}".encode()).digest()
    iv = test_iv.encode()
    cipher = AES.new(encryption_key, AES.MODE_CTR, initial_value=iv, nonce=b"")
    encrypted_payload = cipher.encrypt(simple_string.encode())
    return base64.b64encode(encrypted_payload).decode()


test_id = "1111"
test_secret = "45321d6"
test_iv = "BFB0503C7DA3C32B"

payload_string = json.dumps({"first_name": "Ivan", "last_name": "Ivanov"}, separators=(",", ":"))
encrypted_payload = encrypt_payload(payload_string, test_id, test_secret, test_iv)
print("Encrypted:", encrypted_payload)

Результат работы кода на PHP:

Encrypted: Sk02eEJEbXhlSlNGMkxoME81aTVobURYTWR1WFNuYlNFV0NCd2M4Z0NqdGN0blkyeWFrUTB5LzJpWXdQUzI0ZVVXYUhRR0l6UEZ3PQ==

И на Python:

Encrypted: fcgjSXh98jzz9aoXZDYYbwa+knLwqodJUXOb6VQkBwg75SwWWIr3QogcQXLInDLVTZiYT4Lp3WQ=

Выглядит, будто PHP "под капотом" использует так же двойную конвертацию base64, однако, при добавлении её на Python результат так же не совпадает:

Encrypted: QukFb3ty/h/E3eMJbwtFMhiCnmPBt7FQUSi+zkoPDw8BuxI6WdfdQrcIYC7MxhSKTaKcfoLG5wmZgGbMUzPbR3TY4+xJN28NZoxTDQ==

Все варианты реализации которые, я пробовал (включая использование других библиотек) к идентичному результату так и не привели.


Ответы (0 шт):