Java Regex Range для ASCII - PullRequest
       3

Java Regex Range для ASCII

0 голосов
/ 03 апреля 2012

Переформулированный вопрос, так как кажется, что я недостаточно конкретен;

Для системы RSA с p = 263, q = 587, открытым ключом e = 683 и закрытым ключом d = 81599. Поэтому n = pq = 154381. Для сообщения «Я СТУДЕНТ» шифрование выполняется следующим образом:

  • Преобразование любой буквы (включая пробел) в 3-значный код ASCII, т. Е. 073 032 065 077 032 065 032 083 084 085 068 069 078 084.
  • Соедините каждые два смежных кода ASCII, чтобы сформировать блок, т. Е. 073032 065077 032065 032083 084085 068069 078084. (используйте 000, если последняя буква не имеет к чему присоединиться). Использование алгоритма шифрования c = m e mod n для шифрования каждого блока; c 1 = 73032 683 мод 154381 = 103300 и т. Д.

Предположим, вы являетесь получателем сообщения: 33815872282353670979238213794429016637939017111351. Что такое содержание?

После немного большего размышления я думаю, что, поскольку мне нужно декодировать по частям, то есть декодировать 33815, затем 87228 и т. Д., И т. Д. Я должен просто разделить декодированную часть пополам и проверить, является ли каждая половина в диапазоне ASCII, если нет, вернитесь к оригиналу и разделите его по-другому. Похоже ли это на лучшее решение, чем пытаться что-то взломать с помощью регулярных выражений?

P.S. Декодирование считается домашней работой, я сделал это вручную и знаю, что сообщение расшифровывается как «Я ненавижу криптографию» (кажется, у моего лектора есть чувство юмора), так что вы не помогаете мне делать мою домашнюю работу. Превратить это в программу - это просто что-то вне учебного плана, и я подумал, что это может быть весело / интересно.

1 Ответ

0 голосов
/ 03 апреля 2012

Обычно невероятно плохая идея иметь записи переменной длины без разделителя или индекса.В этом случае лучший подход - это иметь целое число фиксированной ширины с ведущими нулями.

Тем не менее, у вас действительно есть неявный разделитель, при условии, что вы всегда читаете от начала до конца строки, не пропускаясовсем.Если вы берете 0 или 1, чтобы указать, что это трехзначное число, и 2-9, чтобы указать двухзначное число.Примерно так будет работать:

[01][0-9][0-9]|[2-9][0-9]

Но на самом деле - просто выведите свои числа в строку с ведущими нулями.Или загляните в шестнадцатеричное кодирование из 2 символов, если вас беспокоит пробел.Или Base 64, или одно из других печатаемых кодировок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...