Я использую метод Laravel encryptString для шифрования некоторых данных на моем веб-сайте.При этом используется 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: Incorrect AES key length (60 bytes)
, поэтому я не уверен, что яя делаю неправильноЯ пробовал заполнять / выгружать данные / клавишу, но это, похоже, ничего не меняет.Мне интересно, получаю ли я неправильный ключ для расшифровки от 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)
Теперь оператор print печатает несколько байтов, но когда я запускаю .decode (), я получаю ошибку: UnicodeDecodeError: 'utf-8' codec can't decode byte 0xfa in position 0: invalid start byte
и не могу понять, что мне нужно сделать, чтобы его можно было печатать в виде строки.