ROT13 — это простой шифр замены букв , который заменяет букву на 13-ю после нее букву в латинском алфавите .
ROT13 — это особый случай шифра Цезаря , который был разработан в Древнем Риме и использовался Юлием Цезарем в I веке до нашей эры. [1] Ранняя запись на временной шкале криптографии .
ROT13 может обозначаться как «Rotate13», «rotate by 13 places», через дефис «ROT-13» или иногда его автонимом «EBG13».
Применение ROT13 к фрагменту текста требует проверки его алфавитных символов и замены каждого из них буквой, стоящей на 13 позиций дальше в алфавите , при необходимости возвращаясь к началу. [2]
To encode message: Aстановится N, Bстановится Oи так далее до M, который становится Z, затем последовательность продолжается в начале алфавита: Nстановится A, Oстановится Bи так далее до Z, который становится M. Чтобы расшифровать сообщение, вы применяете те же правила подстановки, но на этот раз к зашифрованному тексту ROT13. (Любые другие символы, например цифры, символы, знаки препинания или пробелы , остаются неизменными.)
Поскольку в латинском алфавите 26 букв и 26 = 2 × 13, функция ROT13 является обратной самой себе : [2]
Другими словами, два последовательных применения ROT13 восстанавливают исходный текст (в математике это иногда называется инволюцией ; в криптографии — обратным шифром ).
Преобразование можно выполнить с помощью таблицы поиска , например следующей:
Вход | ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz |
Выход | NOPQRSTUVWXYZABCDEFGHIJKLMnopqrstuvwxyzabcdefghijklm |
Например, в следующей шутке смысл шутки скрыт ROT13:
Преобразовав весь текст с помощью формы ROT13, получаем ответ на шутку:
Повторное применение ROT13 восстановит оригинал.
ROT13 не предназначен для использования в наше время. Во время зачатия в эпоху древнеримских технологий схема шифрования не была представлена математической структурой . Ключ к расшифровке сообщения требует не больше знаний, чем сам факт использования ROT13. Даже если секретность не подведет, любая инопланетная сторона или лицо, способное перехватить сообщение, может взломать код, потратив достаточно времени на расшифровку текста с помощью частотного анализа [2] или нахождения других закономерностей .
В начале 80-х годов ROT13 предположительно использовался на серверах новостных групп Usenet [3] Это было сделано для того, чтобы скрыть потенциально оскорбительные шутки, или запутать ответ на головоломку или другой спойлер [4] , или обмануть менее искушенных спам-ботов [ dubious – discussion ] . ROT13 стал предметом множества шуток.
В 1989 году на Международном конкурсе запутанного кода C (IOCCC) была представлена запись Брайана Уэстли. Компьютерная программа Уэстли может быть закодирована в ROT13 или реверсирована и все равно будет правильно компилироваться . Ее работа при выполнении заключается либо в выполнении кодирования ROT13, либо в реверсировании входных данных. [5]
В декабре 1999 года было обнаружено, что Netscape Communicator использовал ROT13 как часть небезопасной схемы хранения паролей электронной почты. [6]
В 2001 году российский программист Дмитрий Скляров продемонстрировал, что поставщик электронных книг, New Paradigm Research Group (NPRG), использовал ROT13 для шифрования своих документов. Было высказано предположение, что NPRG могла ошибочно принять игрушечный пример ROT13, предоставленный в комплекте разработки программного обеспечения Adobe eBook , за серьезную схему шифрования. [7] Windows XP использует ROT13 в некоторых своих ключах реестра. [8] ROT13 также используется в программе Unix fortune для сокрытия потенциально оскорбительных высказываний .
Иоганн Эрнст Элиас Бесслер , часовщик XVIII века и конструктор вечных двигателей , указал, что ROT13 кодирует его фамилию как Orffyre . Он использовал ее латинизированную форму, Orffyreus , в качестве своего псевдонима. [9]
Из-за своей полной непригодности для настоящей секретности ROT13 стал крылатой фразой для обозначения любой явно слабой схемы шифрования ; критик может заявить, что «56-битный DES в наши дни немногим лучше ROT13». В игре с реальными терминами, такими как «двойной DES», несколько терминов возникли с юмористическим умыслом:
Шутки ROT13 были популярны на многих серверах новостных групп , таких как net.jokes, еще в 1980-х годах. [3]
Новостная группа alt.folklore.urban придумала слово — furrfu — которое было кодировкой ROT13 часто используемого высказывания «sheesh». « Furrfu» появилось в середине 1992 года в ответ на сообщения, повторяющие городские мифы на alt.folklore.urban, после того как некоторые пользователи пожаловались, что «Sheesh!» в качестве ответа новичкам используется слишком часто. [11]
Использование поисковой системы в публичных социальных сетях и по сей день выдает результаты по запросу ROT13 в шутках.
abcdefghijklmnopqrstuvwxyz NOPQRSTUVWXYZABCDEFGHIJKLM | |
aha↔nun | ant↔nag |
balk↔onyx | bar↔one |
barf↔ones | be↔or |
bin↔ova | ebbs↔roof |
envy↔rail | er↔re |
errs↔reef | flap↔sync |
fur↔she | gel↔try |
gnat↔tang | irk↔vex |
clerk↔pyrex | purely↔cheryl |
PNG↔cat | SHA↔fun |
furby↔sheol | terra↔green |
what↔Jung | URL↔hey |
purpura↔Chechen | shone↔FUBAR |
Ares↔Nerf | abjurer↔nowhere |
ROT13 предоставляет возможность для игр с буквами. Некоторые слова при преобразовании с помощью ROT13 дадут другое слово. Примерами пар из 7 букв в английском языке являются abjurer и nothing , а также Czech и purpura . Другие примеры таких слов показаны в таблице. [12] Пара gnat и tang является примером слов, которые являются как обратными, так и обратными ROT13.
ROT5 — это практика, похожая на ROT13, которая применяется к числовым цифрам (от 0 до 9). ROT13 и ROT5 могут использоваться вместе в одном сообщении, иногда называемом ROT18 (18 = 13 + 5) или ROT13.5.
ROT47 является производной от ROT13, которая, в дополнение к скремблированию основных букв, обрабатывает цифры и общие символы. Вместо использования последовательности A–Zв качестве алфавита, ROT47 использует больший набор символов из общей кодировки символов, известной как ASCII . В частности, 7-битные печатные символы, исключая пробел, от десятичных 33 ' !' до 126 ' ~', всего 94, взятые в порядке числовых значений их кодов ASCII, вращаются на 47 позиций без особого учета регистра. Например, символ Aотображается в p, в то время как aотображается в 2.
Использование более крупного алфавита приводит к более тщательному запутыванию, чем ROT13; например, номер телефона, который +1-415-839-6885не очевиден на первый взгляд из зашифрованного результата Z'\c`d\gbh\eggd. С другой стороны, поскольку ROT47 вводит цифры и символы в смесь без разбора, становится сразу очевидно, что текст был закодирован.
Пример:
шифрует для
Библиотека GNU C , набор стандартных процедур, доступных для использования в компьютерном программировании , содержит функцию — [13] — которая имеет схожее назначение с ROT13, хотя она предназначена для использования с произвольными двоичными данными. Функция работает, объединяя каждый байт с двоичным шаблоном 00101010 ( 42 ) с помощью операции исключающего или (XOR). Это производит простой шифр XOR . Как и ROT13, XOR (и, следовательно , ) является самообратным и обеспечивает аналогичный, фактически отсутствующий, уровень безопасности.memfrob()memfrob()
ROT13 и ROT47 довольно легко реализовать с помощью терминального приложения Unix tr; для шифрования строки «Упакуйте мою коробку пятью дюжинами бутылок с ликером» в ROT13:
$ # Преобразовать заглавные буквы AZ в N-ZA-M и строчные буквы az в n-za-m $ tr 'A-Za-z' 'N-ZA-Mn-za-m' <<< "Упакуйте мою коробку с пятью дюжинами кувшинов для спиртного" Cnpx Zl Obk Jvgu Svir Qbmra Yvdhbe Whtf
и строка «Быстрая коричневая лиса перепрыгивает через ленивую собаку» для ROT47:
$ echo "Быстрая коричневая лиса перепрыгивает через ленивую собаку" | tr '\!-~' 'P-~\!-O' % 96 "F:4< qC@H? u@I yF>AD ~G6C %96 {2KJ s@8
В Emacs можно выполнить ROT13 для буфера или выделения с помощью команд [14] M-x toggle-rot13-mode
, M-x rot13-other-window
, или M-x rot13-region
.
В текстовом редакторе Vim можно ROT13 буфера с помощью команды [15] ggg?G
.
Модуль кодеков обеспечивает преобразование текста «rot13» . [16]
>>> импорт кодеков >>> печать ( кодеки . кодировать ( "Быстрая коричневая лиса прыгает через ленивую собаку" , "rot13" )) Gur Dhvpx Oebja Sbk Whzcf Bire Gur Ynml Qbt
Без импорта каких-либо библиотек это можно сделать в двухстрочном списке :
string = "Кварцевый глиф работа vext cwm поршроп финкс?!"для abcd в [ "abcdefghijklmnopqrstuvwxyz" , "ABCDEFGHIJKLMNOPQRSTUVWXYZ" ]: строка = "" . join ([ abcd [( abcd . index ( char ) + 13 ) % 26 ] если char в abcd иначе char для char в string ])печать ( строка )# Dhnegm tylcu wbo irkg pjz cbefuebc svaxf?!
Для Python 3 можно использовать метод str.maketrans()
текст = "это пример без заглавных букв"my_rot13 = str . maketrans ( "abcdefghijklmnopqrstuvwxyz" , "nopqrstuvwxyzabcdefghijklm" )распечатать ( текст.перевести ( my_rot13 ) )# guvf vf na rknzcyr jvgubhg pncvgny yrggref