bytes
объекты используют свои repr
(с b
и кавычками) при обычном наслоении.Если вы хотите преобразовать в эквивалентную строку, самый простой подход - decode
их как latin-1
(latin-1
- это кодировка 1-1, которая преобразует каждый байт в порядковый номер Unicode с тем же значением).
Так что просто измените:
print(ciphertext)
на:
print(ciphertext.decode('latin-1'))
и:
print(decrypted)
на:
print(decrypted.decode('latin-1'))
Itпохоже, что aes.encrypt
неявно "кодирует" входную строку в latin-1
( делает [ord(c) for c in text]
, который эффективно кодирует в latin-1
без фактической проверки, что символы являются допустимыми latin-1
; символыс порядковыми номерами выше 255, вероятно, взорвется позже при обработке), так что это разумное решение, учитывая ограничения модуля.Если вы хотите поддерживать нелатинские входы-1, убедитесь, что encode
для ввода encrypt
с лучшей кодировкой (например, utf-8
), и декодируйте с той же кодировкой на другом конце (вы захотитеиспользуйте latin-1
для зашифрованного текста, несмотря ни на что; это необработанные случайные байты, поэтому любая другая кодировка не имеет смысла).