Как ЭТО декодировать? Здравствуйте. Пишу сюда с последней надеждой. Установил библиотеку 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
245 +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 Апр 2024 в 13:06
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир