Как ЭТО декодировать? Здравствуйте. Пишу сюда с последней надеждой. Установил библиотеку 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)
Проблема в том, что после расшифровки вы получаете байтовый объект, а не строку. Попробуйте использовать метод .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' при декодировании после расшифровки и проверьте, поможет ли это решить вашу проблему с декодированием.
Проблема в том, что после расшифровки вы получаете байтовый объект, а не строку. Попробуйте использовать метод .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' при декодировании после расшифровки и проверьте, поможет ли это решить вашу проблему с декодированием.