Кодируйте в Laravel, декодируйте в PythonPython

Программы на Python
Anonymous
Кодируйте в Laravel, декодируйте в Python

Сообщение Anonymous »

Я использую метод encryptString Laravel для шифрования некоторых данных на своем веб-сайте. При этом используется 256-битное шифрование AES-CBC OpenSSL без какой-либо сериализации. Сейчас я пытаюсь расшифровать эти данные с помощью Python, но постоянно получаю ошибки относительно длины ключа и не могу понять, почему.

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

Example data to decrypt: eyJpdiI6ImdxY0VcLzFodmpISFV4allSWmJDdEpRPT0iLCJ2YWx1ZSI6IkxXd0ZJaUd2bTUweW5pNm0wUjQwOFM2N1wvWEs5SlYrNB4xNlR7Qkh1U3FvPSIsIm1hYyI6Ijc5ZWM0YTYxYjljZGFiNzgwNjY2NDU1ZmQ5Yjc1ZmJlOGU4NzBkMjQzMzA3MmVhYzE3NzY4ZmU1MWIyMjZlOTQifQ==

Example Key to use for decryption (from laravel .env):
base64:/AZejP0lh3McL/+Vy5yZcADdTcR65qnx5Jqinuw7raK=
Я изменил эти значения, поэтому на самом деле расшифровка с использованием этих значений не даст никаких реальных данных, просто решил, что это будет хорошо, например. Затем я пытаюсь расшифровать эти данные в Python 3.7 с помощью:

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

import base64
from Crypto.Cipher import AES

def decrypt(enc, key):
IV = 16 * '\x00'
decobj = AES.new(key, AES.MODE_CBC, IV)
data = decobj.decrypt(base64.b64decode(enc))
print(str(data.decode()))

if __name__ == "__main__":
key = b"/AZejP0lh3McL/+Vy5yZcADdTcR65qnx5Jqinuw7raK="
decrypt("eyJpdiI6ImdxY0VcLzFodmpISFV4allSWmJDdEpRPT0iLCJ2YWx1ZSI6IkxXd0ZJaUd2bTUweW5pNm0wUjQwOFM2N1wvWEs5SlYrNB4xNlR7Qkh1U3FvPSIsIm1hYyI6Ijc5ZWM0YTYxYjljZGFiNzgwNjY2NDU1ZmQ5Yjc1ZmJlOGU4NzBkMjQzMzA3MmVhYzE3NzY4ZmU1MWIyMjZlOTQifQ==", key)
Кажется, это должно работать, но когда я запускаю его, я получаю сообщение об ошибке: ValueError: Неверная длина ключа AES (60 байт), поэтому я Я не уверен, что я делаю неправильно. Я пробовал дополнять/удалять данные/ключ, но, похоже, это ничего не меняет. Мне интересно, не получаю ли я неправильный ключ для расшифровки из Laravel, но, судя по связанной документации, это должен быть просто APP_KEY в моем файле .env.

Если бы кто-нибудь мог мне помочь или указать правильное направление, это было бы потрясающе!

Этот вопрос уникален среди других подобных вопросов, потому что я В первую очередь я пытаюсь выяснить, получаю ли я правильный ключ AES от Laravel. На самом деле мне не особо нужна помощь в расшифровке, я просто думаю, что беру неправильный ключ от Laravel.

РЕДАКТИРОВАТЬ: Новый код, кажется, работает:

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

import base64
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad

def decrypt(enc, key):
IV = 16 * '\x00'.encode()
decobj = AES.new(key, AES.MODE_CBC, IV)
data = decobj.decrypt(pad(base64.b64decode(enc), 16))
print(base64.b64decode(data))

if __name__ == "__main__":
key = base64.b64decode(b"/AZejP0lh3McL/+Vy5yZcADdTcR65qnx5Jqinuw7raK=")
decrypt("eyJpdiI6ImdxY0VcLzFodmpISFV4allSWmJDdEpRPT0iLCJ2YWx1ZSI6IkxXd0ZJaUd2bTUweW5pNm0wUjQwOFM2N1wvWEs5SlYrNB4xNlR7Qkh1U3FvPSIsIm1hYyI6Ijc5ZWM0YTYxYjljZGFiNzgwNjY2NDU1ZmQ5Yjc1ZmJlOGU4NzBkMjQzMzA3MmVhYzE3NzY4ZmU1MWIyMjZlOTQifQ==", key)
Оператор печати теперь печатает несколько байтов, но когда я запускаю для него .decode(), я получаю ошибку: UnicodeDecodeError: кодек 'utf-8' не может декодировать байт 0xfa в позиции 0: неверный начальный байт, и я не могу понять, что мне нужно сделать, чтобы его можно было напечатать как строку.

Подробнее здесь: https://stackoverflow.com/questions/526 ... -in-python

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