Расшифровать AES в PHP openssl из Python AES pycryptodomex

BS = 16
pad = lambda s: s + (BS - len(s) % BS) * chr(BS - len(s) % BS)
unpad = lambda s: s[:-ord(s[len(s) - 1:])]

base64pad = lambda s: s + '=' * (4 - len(s) % 4)
base64unpad = lambda s: s.rstrip(" = ")
encrypt_key = 'BKHlhb899Y09olUa' #Needs to be 16 chars

def encrypt(key, msg):
    iv = Random.new().read(BS)
    cipher = AES.new(key.encode("utf8"), AES.MODE_CFB, iv)
    encrypted_msg = cipher.encrypt(pad(str(msg)).encode("utf8"))
    return base64unpad(urlsafe_b64encode(iv + encrypted_msg).decode("utf8"))

def decrypt(key, msg):
    decoded_msg = urlsafe_b64decode(base64pad(msg))
    iv = decoded_msg[:BS]
    encrypted_msg = decoded_msg[BS:] 
    cipher = AES.new(key.encode("utf8"), AES.MODE_CFB, iv)
    return unpad(cipher.decrypt(encrypted_msg))

Encrypted = encrypt(encrypt_key, "1234567890123456")
print(Encrypted)
Decrypted = decrypt(encrypt_key, Encrypted)
print(Decrypted)

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

$encryptedText = "wIR0ElYIkuKckQQ-0KikhLuXjkL2vTAaOtaO7WyVp2A2JE5FTWZf__ZgCmUQ2Lre";
$key = "BKHlhb899Y09olUa";

echo openssl_decrypt(substr(base64_decode($encryptedText), 16), "AES-128-CFB", $key, OPENSSL_RAW_DATA, substr(base64_decode($encryptedText), 0, 16))."<br>";

Кажется, PHP-эквивалентом Python MODE_CFB является AES-128-CFB8. Также base64_decode неправильно декодирует ваши строки Python, используйте b64encode вместо urlsafe_b64encode. CFB не требует заполнения, но если это необходимо, то PyCryptodome предоставляет функции заполнения. Наконец, если вам нужно назвать lambda, лучше всего определить обычную функцию.

t.m.adam 20.03.2019 05:44

На самом деле это упоминается в документы, размер сегмента по умолчанию составляет 8 бит.

t.m.adam 20.03.2019 06:06
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
2
140
0

Другие вопросы по теме