Import unittest import base64 from py3rijndael import Rijndael import os import codecs #plain text a = input ("Пожалуйста, введите обычный текст:") plain_text = a.encode ('utf-8') padded_text = ...

0
Bhuvan 19 Янв 2021 в 13:37

1 ответ

Лучший ответ

Думаю, вы используете python3. (На python2 и python3 все по-другому.)

Во-первых, попробуем объяснить, почему это происходит.

Вы копируете b"\x08\xda... из другого места и вставляете его в запрос. input вернет объект str (unicode python2), первый символ которого - 'b', второй - '"', третий - '\', четвертый - 'x' и т. Д.

При кодировании он становится байтовой строкой с такими же символами (представленными в байтах), поскольку есть только символы ascii.

Тогда есть печать. Какой байт '\' нужно напечатать? Он печатается как b'\\', поэтому вы видите двойные обратные косые черты.


Легкий (но опасный) способ.

Прочитав подсказку, eval ее. То есть выполнять его так же, как коды Python. И тогда вы получите то, что было, когда оно было впервые сгенерировано случайным образом. Фактически input в python2 сделал это за вас.

Но это, конечно, небезопасно, потому что ввод, который дают ваши пользователи, может содержать любую возможную строку и может содержать вредоносный фрагмент.


Я могу придумать лучший способ.

В качестве ключа всегда используется байтовая строка, а байтовые строки обычно не печатаются. Поэтому вам нужно преобразовать его во что-то для печати, скопировать и вставить сюда и де-преобразовать обратно. возможно, кодировка base64 может помочь вам в этом.

1
Nathan Hardy 19 Янв 2021 в 12:26