.no
- 1 year ago
- 0
- 0
ROT13 ( англ. rotate ; «сдвинуть на 13 позиций», иногда используется написание через дефис — ROT-13 ) представляет собой шифр подстановки простой заменой для алфавита английского языка (стандартной латиницы), используемый в интернет-форумах , как средство для сокрытия спойлеров , основных мыслей, решений загадок и оскорбительных материалов от случайного взгляда. ROT13 был охарактеризован как « сетевой эквивалент того, как в журналах печатают ответы на вопросы викторин — перевёрнутыми буквами» . ROT13 — это вариация шифра Цезаря , разработанного в Древнем Риме .
ROT13 является обратимым алгоритмом , то есть отменить ROT13 можно, применив тот же алгоритм; одни и те же действия могут быть использованы для кодирования и декодирования. Алгоритм не дает никакой реальной криптографической безопасности и никогда не должен использоваться для этого. Он часто приводится в качестве канонического примера слабого метода шифрования. Алгоритм ROT13 породил разнообразные онлайн-игры с буквами и словами; алгоритм часто применяется в новостных группах (Usenet).
Применение алгоритма ROT13 к части текста требует простой замены каждого буквенного символа на соответствующий ему со сдвигом на 13 позиций в алфавите . A становится N , B становится O , и т. д. до М , которое становится Z , а затем последовательно применяются буквы из начала алфавита: N становится A , O становится B , и так далее до Z , которая становится М . Затронуты лишь те буквы, которые используются в английском алфавите ; цифры, символы, пробелы и все остальные символы остаются без изменений. Поскольку в английском алфавите всего 26 букв, а 26 = 2 × 13, то функция ROT13 является обратной для самой себя :
Иными словами, два последовательных использования ROT13 восстанавливают первоначальный текст (в математике это иногда называют инволюцией ; в криптографии — ).
Преобразования можно сделать с помощью таблицы поиска , такие, как:
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz |
NOPQRSTUVWXYZABCDEFGHIJKLMnopqrstuvwxyzabcdefghijklm |
Например, в следующей шутке основная мысль была закрыта шифром ROT13:
How can you tell an extrovert from an introvert at NSA? Ubj pna lbh gryy na rkgebireg sebz na vagebireg ng AFN?
Преобразование текста через шифр ROT13, ответ на шутку:
In the elevators, the extrovert looks at the OTHER guy's shoes. Va gur ryringbef, gur rkgebireg ybbxf ng gur BGURE thl'f fubrf.
Повторное применение алгоритма ROT13 восстановит оригинал.
ROT13 использовался в новостном форуме net.jokes в начале 1980-х . Он использовался, чтобы скрыть потенциально оскорбительные шутки или ответ на головоломку или спойлер. Сдвиг на тринадцать знаков был выбран по сравнению с другими значениями, такими, как три, как в оригинале шифра Цезаря, потому что тринадцать — это число, которое обеспечивает как кодирование, так и декодирование, тем самым предоставляя единое удобство для обеих команд . ROT13, как правило, поддерживается в качестве встроенной функции в функциях программного обеспечения для чтения лент новостей . Адреса электронной почты также иногда кодируют алгоритмом ROT13, чтобы скрыть их от не самых продвинутых спам-ботов .
ROT13 представляет собой частный случай , известного как шифр Цезаря , приписываемый Юлию Цезарю в I веке до нашей эры . Более специфичный случай использования шифрования — индийским философом Ватсьяяна Малланага , автором секс -руководства Кама Сутра .
ROT13 не предназначен для использования с конфиденциальной информацией; использование постоянного сдвига означает, что шифрование фактически не имеет ключа , и для расшифровки требуется не больше знаний, чем тот факт, что может использоваться ROT13. Даже без этих знаний алгоритм легко дешифруется посредством частотного анализа . Поскольку он полностью не соответствует реальной защите тайны, ROT13 стал жаргонным словом для обозначения какой-либо явно слабой схемы шифрования; критика может утверждать, что «56-битный DES — это немного лучше, чем ROT13 в прошлом». Кроме того, часто используется сходство с реальными выражениями, например, «double DES», используют с чувством юмора «double ROT13», «ROT26» или «2ROT13», в том числе в пародийной академической работе «On the 2ROT13 Encryption Algorithm» .
Применив алгоритм ROT13 к уже ROT13-зашифрованному тексту, получим первоначальный текст; ROT26 — эквивалент отсутствия шифрования как такового. В дополнение, тройное применение ROT13 или 3ROT13 (используется по шутливой аналогии с 3DES) эквивалентно обычному ROT13.
В декабре 1999 года было установлено, что Netscape Communicator использовал RОТ-13 в рамках небезопасной схемы для хранения паролей электронной почты . В 2001 году русский программист Дмитрий Скляров продемонстрировал, что поставщик eBook, компания New Paradigm Research Group (NPRG), использовала ROT13 для шифрования своих документов; предположительно, в NPRG ошибочно приняли игрушечный пример ROT13, предоставляемый Adobe с инструментарием Software Development Kit для eBook, за серьёзную схему шифрования Windows XP использует 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 |
ROT13 предоставляет возможность для «игр в слова». Некоторые слова, трансформированные алгоритмом ROT13, производят другое известное слово. Самые длинные примеры из английского языка состоят из семи букв: «abjurer» (отрекающийся от своих убеждений) ↔ «nowhere» (нигде) и «Chechen» ( чеченец ) ↔ «purpura» ( пурпура ). Другие примеры слов приведены в таблице .
В 1989 году ассоциация International Obfuscated C Code Contest (IOCCC) добавила нотацию Brian Westley. Компьютерная программа Westley может корректно компилировать как простые, так и кодированные алгоритмом ROT13 исходники. Программа действует либо для выполнения кодировки ROT13, либо для обратного кодирования закодированного введённого текста .
В группе новостей alt.folklore.urban придумали слово «furrfu», что является закодированным в ROT13 часто используемым словом «sheesh» (тьфу!). «Furrfu» активно использовался в середине 1992 года в ответ на часто публикующиеся повторения городских мифов на сайте alt.folklore.urban, на что многие жаловались, что такие ответы на публикации новичков были чрезмерностью .
В веб-комиксах «Darths and Droids» один герой (Jim, играет Квай-Гон Джинн ) утверждает, что в ROT13 слово «Jedi» (джедай) кодируется как «monk» (монах). Другой герой (Pete, играет робота R2-D2 ) немедленно корректирует его, отмечая, что «monk» в ROT13 соответствует «Zbax».
ROT47 является производным от алгоритма ROT13, в дополнение к основному набору букв, также использует числа и вспомогательные символы. Вместо использования алфавитной последовательности A–Z , ROT47 использует больший набор символов , известный как кодировка ASCII . В частности, 7-битные символы для печати, за исключением пробела, от десятичного 33-го символа '!' до 126-го символа '~' — 94 символа в общей сложности, принятых в порядке числовых значений их кодов ASCII, способны смещаться на 47 позиций без специальных договорённостей. Например, символ A отображается на p , символ a отображается на 2 . Использование большего алфавита производит более тщательную обфускацию , чем у ROT13, например, неочевидно, что Z`\c`d\gbh\eggd — это закодированный телефонный номер +1-415-839-6885. С другой стороны, поскольку ROT47 вводит цифры и символы в смеси без каких-либо различий, является более очевидным, что текст был зашифрован.
Пример:
шифруется в
Библиотека GNU C , набор стандартных процедур для использования в компьютерных программах, содержит функцию memfrob() , которая имеет цели, аналогичные ROT13, хотя она предназначена для использования с произвольными бинарными данными. Эта функция работает, оперируя с каждым байтом в сочетании с двоичной схемой 00101010 ( число 42 ) с использованием операции исключающего ИЛИ (XOR). Это работает как . Как и ROT13, memfrob() взаимнообратна, и предоставляет аналогичный, практически отсутствующий, уровень безопасности.
На языке программирования Python алгоритм выглядит следующим образом:
def rot13(text):
rot13ed = ''
for letter in text:
byte = ord(letter)
capital = (byte & 32)
byte &= ~capital
if ord('A') <= byte <= ord('Z'):
byte -= ord('A')
byte += 13
byte %= 26
byte += ord('A')
byte |= capital
rot13ed += chr(byte)
return rot13ed
Оптимизированный вариант:
def rot13(text):
sub = 'NOPQRSTUVWXYZABCDEFGHIJKLM[\]^_`nopqrstuvwxyzabcdefghijklm'
res = []
for letter in text:
res.append(sub[ord(letter)-65])
return ''.join(res)
Пример на языке программирования Rust :
#[rustfmt::skip]
const SUBSTITUTIONS: [u8; 58] = [
b'N', b'O', b'P', b'Q', b'R', b'S', b'T', b'U', b'V', b'W', b'X', b'Y', b'Z',
b'A', b'B', b'C', b'D', b'E', b'F', b'G', b'H', b'I', b'J', b'K', b'L', b'M',
0, 0, 0, 0, 0, 0,
b'n', b'o', b'p', b'q', b'r', b's', b't', b'u', b'v', b'w', b'x', b'y', b'z',
b'a', b'b', b'c', b'd', b'e', b'f', b'g', b'h', b'i', b'j', b'k', b'l', b'm',
];
/// # Example
///
/// ```
/// assert_eq!("Uryyb, jbeyq!", rot13("Hello, world!"));
/// ```
fn rot13(src: &str) -> String {
src.bytes()
.map(|byte| {
let capital_byte = byte & !32;
char::from(if capital_byte >= b'A' && capital_byte <= b'Z' {
// safety: this should be safe for Latin letters
unsafe { *SUBSTITUTIONS.get_unchecked((byte - b'A') as usize) }
} else {
byte
})
})
.collect()
}
fn main() {
let src = "Hello, world!";
println!("Original: \"{}\", Encoded: \"{}\"", src, rot13(src));
}