#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 связана с интерпретацией строк, потому что он говорит, что хочет получить ее только в одной строке, и его строка интерпретируется неправильно (из-за символов новой строки), поэтому она занимает несколько строк (в отличие от того, что он хотел).