Как ЭТО декодировать? Здравствуйте. Пишу сюда с последней надеждой. Установил библиотеку pycryptodome, так как пытаюсь сделать клиент-сервер приложение, для обеспечения безопасности информации буду использовать AES из библиотеки. Все бы ничего, но чтобы зашифровать текст являющийся String'ом нужно перед текстом поставить b'hello, world'
Тогда AES принимает его и шифрует, в данный момент после шифра у меня получается b'\x06\xad\x13*V\x01\xa55\xb6v}K'
После дешифровки b'\xfc\x0f%\xc9\x9f\x0f\x99\x17^\x16\x96\xd6'
Но когда я пытаюсь его декодировать обратно в текст .decode('utf-8')
Появляется такая ошибкаdecrypt = decrypt.decode('utf-8')
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xfc in position 0: invalid start byte
Иногда такое decrypt = decrypt.decode('utf-8')
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xeb in position 0: invalid continuation byte
(После шифровки b'\xb3\xfa#\x06\xb6\xa6\xc5\x95F|CJ' ; После дешифровки b'\xeb`\xdb\x9bK|\xb25!\x18\xb4Z')
Может кто знает в чем дело? Гугл, Яндекс не дали понятных результатов, а в документации об этом ничего…
Хотел, и забыл вставить весь код text = b'Hello, World'
AESkey = get_random_bytes(16)
def encrypt(message, key):
chiper = AES.new(key,AES.MODE_EAX)
crypt, tag = chiper.encrypt_and_digest(text)
return crypt, tag
def decrypt(message, key,tag):
chiper = AES.new(key,AES.MODE_EAX)
print(message)
decrypt = chiper.decrypt(message)
print(decrypt)
decrypt = decrypt.decode('utf-8')
print(decrypt)
cryptmess, tag = encrypt(text, AESkey)
decrypt(cryptmess, AESkey,tag)

21 Авг 2019 в 07:10
222 +1
0
Ответы
1

Проблема в том, что после расшифровки вы получаете байтовый объект, а не строку. Попробуйте использовать метод .decode() только в том случае, если вы уверены, что получили строку в кодировке utf-8. В вашем случае, возможно, лучше использовать метод .decode('latin-1') или .decode('ascii').

Измените ваш код следующим образом:

text = b'Hello, World'
AESkey = get_random_bytes(16)
def encrypt(message, key):
cipher = AES.new(key, AES.MODE_EAX)
crypt, tag = cipher.encrypt_and_digest(text)
return crypt, tag
def decrypt(message, key, tag):
cipher = AES.new(key, AES.MODE_EAX)
decrypt = cipher.decrypt(message)
decrypt = decrypt.decode('latin-1') # или decrypt.decode('ascii')
print(decrypt)
cryptmess, tag = encrypt(text, AESkey)
decrypt(cryptmess, AESkey, tag)

Попробуйте использовать кодировку 'latin-1' или 'ascii' при декодировании после расшифровки и проверьте, поможет ли это решить вашу проблему с декодированием.

20 Апр в 13:06
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 95 172 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир