Вставка без форматирования в терминал

#python #rsa

#питон #rsa

Вопрос:

Я разрабатываю программу шифрования rsa, и у меня возникают проблемы при попытке вставить зашифрованную строку криптограммы во ввод программы декодирования. Это не вопрос реализации (программа работает нормально), а вопрос вставки формата в терминал python. Например:

Я получаю следующую криптограмму после выполнения шифра rsa:

 =ª’Jß°:Ó¼6¾Ó—ƒõVò£ÄͫجD€µ7BãG!QçæÙ“™íñNóOræIÇ

j~
~Ej.{³«Ã2Ó#G    ‰—)¶¦9pÙ¸‰Ÿ9IÈÎEX4~Í~:ËçDxý”ª]!æ%9áèÑ×ô
ýŽ
 

К моему удивлению, то же самое происходит при вставке внутри этой формы SO post. Эти разрывы строк не должны появляться, поэтому я предполагаю, что это может быть связано с интерпретацией некоторых специальных символов. То, что я хочу, это однострочная строка, как следует (не обращайте внимания на подстроку «Mesnage cifrado», это всего лишь программа, ориентированная на пользователя, чего стоит то, что следует за этой подстрокой):

введите описание изображения здесь

Примечание: я уже пробовал ' ' использовать разделители строк

Комментарии:

1. Мне кажется, что вы пытаетесь вставить двоичные данные в свой терминал. Если это так, вы не должны этого делать. Двоичные данные должны в значительной степени храниться только в файлах. Терминалы имеют дело с текстом, а не с двоичными файлами. Если вы хотите иметь возможность копировать / вставлять двоичные данные, вы можете закодировать их с помощью Base64.

2. Вы можете закодировать его слоем перед отправкой и декодировать после отправки. Я хочу сказать, определите символы, которые вызывают разрывы строк (возможно CR , / LF ), и замените их чем-то вроде [CR] and [LF] . Затем, после отправки, замените [CR] на CR управляющий символ и [LF] на LF управляющий символ.

3. @LakshyaRaj: Это не сработает. Вероятно, данные уже повреждены к моменту их распечатки, так как просто процесс преобразования случайных байтов в строку в наборе символов, таком как UTF-8, приведет к повреждению данных. Смотрите предыдущий комментарий.

4. @PresidentJamesK. Полк: Да, это имеет смысл. Это действительно похоже на двоичный контент, и по какой-то причине в нем есть управляющие символы. Вероятно, не очень хорошая идея для преобразования символов.

Ответ №1:

Не уверен, правильно ли я понял, но если вы хотите, чтобы python воспринимал то, что вы буквально ввели, а не интерпретировал это, возможно, вы могли бы попробовать использовать необработанные строки, если вы еще этого не сделали.

Это строка по умолчанию:

 s = 'HinHello'
print(s)
 

Вывод:

 Hi
Hello
 

Это то, что вы получаете с необработанными строками (вам просто нужно поставить r перед ' ):

 raw_s = r'n=ª’Jß°:Ó¼6¾Ó—ƒõVò£ÄͫجD€µ7BãG!QçæÙ“™níñNóOræIÇj~~Ej.{³«Ã2Ó#G‰)¶n¦9pÙ¸‰Ÿ9IÈÎEX4~Í~:ËçDxý”ª]n!æ%9áèÑ×ôýŽ'
print(raw_s)
 

Вывод:

 n=ª’Jß°:Ó¼6¾Ó—ƒõVò£ÄͫجD€µ7BãG!QçæÙ“™níñNóOræIÇj~~Ej.{³«Ã2Ó#G‰)¶n¦9pÙ¸‰Ÿ9IÈÎEX4~Í~:ËçDxý”ª]n!æ%9áèÑ×ôýŽ
 

(ps: просто добавил некоторые n ‘s в вашу исходную строку, чтобы продемонстрировать, что необработанные строки не будут интерпретировать их как разрывы строк)

Комментарии:

1. В вашем примере есть проблема: строка, которую вы используете r , будет одинаковой с или без r . Попробуйте распечатать его с помощью и без r . Вы получите те же результаты. Проблема в том, что вам не хватает символов, которые делают его многострочным.

2. Спасибо за предложение @LakshyaRaj, просто добавил несколько разрывов строк для примера. Но мне все еще любопытно, является ли интерпретация строк реальной проблемой операционной системы? Потому что для меня это также может быть что-то связанное с кодировкой символов UTF-8 и тому подобным…

3. Проблема OPs в другом, его вывод — это не то, что он ввел.

4. @David: Похоже, что проблема OP связана с интерпретацией строк, потому что он говорит, что хочет получить ее только в одной строке, и его строка интерпретируется неправильно (из-за символов новой строки), поэтому она занимает несколько строк (в отличие от того, что он хотел).