ROT13 это просто Метод шифрования Отказ Он сдвигается каждый символ четкой текстовой строки 13 позиций вперед в алфавите.
Этот Python One-Liner делает шифрование ROT13 для вас:
cleartxt = "berlin" abc = "abcdefghijklmnopqrstuvwxyz" secret = "".join([abc[(abc.find(c)+13)%26] for c in cleartxt]) print(secret) # oreyva
Не волнуйтесь, если это кажется запутанным. Мы объясним это все подробно ниже!
Примечание : Переменная ClearTxt
Относится к строке, которую вы хотите кодировать. Он не должен содержать пробелы, цифры или заглавные буквы!
Кодировать строки, содержащие Пространства и заглавные буквы Используйте встроенный кодеки
Библиотека – это шифрование ROT13 для вас:
import codecs codecs.encode(phrase, 'rot_13')
(Чтение времени – 12 минут, или посмотрите видео!)
ROT13 видеоурок
Если вы уже узнали что-то из этого руководства, почему бы не присоединиться к моей бесплатной программе обучения Python? Я называю это Finxter Email Computer Science Academy -И только что: а Бесплатно, простое в использовании академия электронной почты что Обучает вас питон в небольших ежедневных дозах для начинающие и Плюсы Одинакота!
Узнайте Python и присоединяйтесь к Академии науки по электронной почте FINXTER. Это весело!
Теперь давайте ответим на важный технический вопрос:
Что такое ROT13?
Алгоритм ROT13 – это простое алгоритм шифрования. Он используется на форумах, таких как Reddit, чтобы предотвратить спойлеры – или скрыть детали разговора от новичков.
Но прежде чем мы будем двигаться дальше, я рад представить вам мою новую книгу Python Python One-listers (Amazon Link).
Если вам нравятся одноклассники, вы будете любить книгу. Это научит вам все, что нужно знать о Одно строка кода Python. Но это тоже Введение в компьютерную науку , наука о данных, машин обучения и алгоритмы. Вселенная в одной строке Python!
Книга была выпущена в 2020 году с помощью книги по программированию мирового класса Nostarch Press (San Francisco).
Ссылка: https://nostarch.com/pythononeliners.
ROT13 настолько прост, что обеспечивает практически без безопасности. Но если вы понимаете это, вы, наконец, сможете расшифровать эти инсайдерские разговоры на Reddit.
Алгоритм можно объяснить в одном предложении. ROT13 = Гниль съел строку, чтобы зашифрован 13 Позиции (модуло 26) в алфавите 26 символов.
a | b | c | d | e | f | g | h | i | j | k | l | m |
n | o | p | q | r | s | t | u | v | w | x | y | z |
Если вы хотите зашифровать строку, переключите каждый символ вперед на 13 позиций в алфавите. Если вы пройдете мимо последнего символа «z», вы начинаете в первой позиции в алфавите «А».
Что такое реализация ROT13 в Python?
Вы узнаете около трех способов реализации алгоритма ROT13:
- Простой для понимания реализации алгоритма ROT13.
- А Python One-Liner Отказ
- Библиотека для шифрования ROT13.
Используйте версию, которую вы предпочитаете.
ROT13 Реализация 1: функция NO-библиотеки
Поэтому проверьте этот алгоритм ROT13 без использования библиотек. Внимательно прочитайте код, потому что я задам вам вопрос об этом в на мгновение.
def rot13(phrase): abc = "abcdefghijklmnopqrstuvwxyz" out_phrase = "" for char in phrase: out_phrase += abc[(abc.find(char)+13)%26] return out_phrase phrase = "xthexrussiansxarexcoming" print(rot13(phrase)) # kgurkehffvnafknerkpbzvat print(rot13(rot13(phrase))) # What's the output?
Последнее выступление Print () демонстрирует хорошую собственность алгоритма. Но какой?
Решение – это выход "ThexRusssCarexComing"
Отказ Это потому, что ROT13 – его собственная обратная функция (смещение на 13 + 13 позиций возвращает вас к исходному символу в алфавите).
ROT13 Реализация 2: Python One-liner
Усовершенствованный кодер всегда предпочитает самый короткий и самый короткий способ написания кода Pythonic. Итак, давайте переписаним алгоритм ROT13 в качестве одноклассника Python.
abc = "abcdefghijklmnopqrstuvwxyz" def rt13(x): return "".join([abc[(abc.find(c) + 13) % 26] for c in x]) print(rt13(rt13(phrase)))
Мы создаем список зашифрованных символов через понимание списка. Если вам нужен переподготовка в списке, посмотрите наш комплексное руководство в блоге.
Тогда мы …| Присоединяйтесь к Этот список вместе с пустой строкой, чтобы получить конечный результат. В понимании списка каждый символ, C . , из исходной строки
х , зашифрован отдельно. Для каждого
C . мы находим его положение в алфавите с
abc.find (c) Отказ Затем мы добавляем 13 на эту позицию. Итак,
‘Z’ Возвращает индекс 25 и 25+. Но нет 38-й буквы. Таким образом, мы используем оператор модуля (
% 26 ), чтобы убедиться, что наши значения находятся в диапазоне 0 - 25 (индекса Python начнутся в 0).
Чтобы зашифровать символ «z», алгоритм сдвигает свой индекс 25 на 13 индексных позиций вправо. Это требует результата модуль 26, чтобы получить окончательный индекс зашифрованного символа. Это предотвращает превышение завышения, перезапуская операцию сдвига при индексе 0. Это приводит к следующей последовательности сдвига: 25> 0> 1> …> 12.
ROT13 Реализация 3: Альтернатива
Альтернативное решение : один из моих “Кофе-брейк Python” Абонеры электронной почты, Томас, придумали альтернативное решение, которое быстро и легко читать.
def rot13(phrase): key = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" val = "nopqrstuvwxyzabcdefghijklmNOPQRSTUVWXYZABCDEFGHIJKLM" transform = dict(zip(key, val)) return ''.join(transform.get(char, char) for char in phrase)
Идея состоит в том, чтобы «Хардировать» отображение между ключами и ценностями. Это довольно «утомительная» программирование. Но это совершенно действующее решение алгоритма ROT13 (и работает для прописных букв, пробелов, чисел и символов!).
Обратите внимание, что он не кодирует не буквенные символы. Это просто возвращает их:
>>> rot13('Hello World!!') 'Uryyb Jbeyq!!'
Есть ли библиотека для ROT13 в Python?
Да! Это встроенная библиотека под названием кодеки
Отказ Использование алгоритма ROT13 с библиотекой проста. Просто импортируйте библиотеку и вызовите функцию кодирования.
Вот пример:
import codecs phrase = "The Russians are coming!" # Apply twice to get back original string print(codecs.encode(codecs.encode(phrase, 'rot_13'), 'rot_13')) # The Russians are coming! print(codecs.encode('hello', 'rot_13')) # uryyb
Функция кодирования из библиотеки кодеков занимает до трех параметров.
- Первый параметр – это строковый объект для кодирования.
- Второй параметр – это схема кодирования (по умолчанию:
utf-8 '
). - Третий параметр позволяет настроить обработку ошибок.
В большинстве случаев вы можете пропустить последний параметр и использовать обработку ошибок по умолчанию.
Каковы приложения алгоритма ROT13?
Алгоритм ROT13 легко расшифровать. Злоумышленник может легко взломать ваш код, запустив вероятностный анализ в распределении букв в вашем зашифрованном тексте. Вы никогда не должны полагаться на этот алгоритм, чтобы зашифровать ваши сообщения!
Итак, вы можете спросить, Каковы приложения алгоритма ROT13?
Вот некоторые:
- Неясным потенциально оскорбительным шуткам в онлайн-форумах.
- Неясший результат головоломок в онлайн-форумах.
- Неясные возможные спойлеры для фильмов или книг.
- Сместитесь над существующими (слабыми) алгоритмами шифрования: «56-битный DES сильнее, чем ROT13»
- Неясные адреса электронной почты на веб-сайтах против не очень сложных почтовых ботов (99%).
- Используйте его как игру, чтобы найти фразы, которые имеют смысл в формах, зашифрованных или дешифрованных. Примеры: (PNG, CAT), (быть или).
- ROT13 – это особый случай популярных Caesar шифр Отказ ROT13 служит учебным инструментом, чтобы объяснить его.
Таким образом, ROT13 – это больше метод забавного шифрования, который был популярным бегом в интернет-культуре.
Как пользователь на Stackexchange описывает это:
«Так много вещей, которые сделали мягкое запутанность, используемую ROT13, потому что он обычно доступен, и поэтому он был придурчен к ряду более современных языков. Это просто странный крик».
Как обрабатывается капитализация?
Функция кодирования кодеки
Библиотека обрабатывает капитализацию для вас. Если вы применяете ROT13 в прописные буквы, она останется Прописные буквы после кодировки. Если вы применяете ROT13 на строчные буквы Письмо, оно останется строчным.
Вот пример:
import codecs print(codecs.encode('Hello', 'rot_13')) # Uryyb
Как рот13 связан с Caesar Cipher?
Гифр Caesar является обобщением алгоритма ROT13.
«Это тип замещения шифра, в котором каждая буква в открытом тексте заменяется буквой некоторое фиксированное количество позиций вниз по алфавиту».
ROT13 не делает ничего, кроме как исправить «количество позиций вниз по алфавиту» до +13.
Почему мы сдвигаем оригинальный текст, называемый «Clear Text» или «Plain Tex», на 13 позиций, а не на другой номер? Он гарантирует, что применение шифрования дважды возвращает исходный ClearText. Следовательно, вам не нужно определять два отдельных метода для шифрования и дешифрования – один метод для их правления всех!
Это не так, если вы используете любой другой номер. Если вы переместите ClearText на 5 позиций, ROT5, и примените его дважды, вы получаете шифрование ROT10).
Онлайн-инструмент для рта13 Шифрование и дешифрование
Чтобы зашифровать свой собственный ClearText, просто замените строковое значение переменной Clear_Text
с вашей личной строкой.
Нажмите, чтобы посетить интерактивный инструмент, чтобы запутать свои собственные тексты с ROT13.
Каковы альтернативы ROT13?
Большинство альтернатив сильнее, чем ROT13. Вот несколько из них:
- Тройной дес
- RSA
- Взрыв
- Безразлично
- Aes.
Если вы хотите погрузиться глубже в эти альтернативы, проверить Эта статья Это кратко описывает их идеи.
Какие примеры ROT13?
Вот примеры из различных источников на Веб Отказ Я выбрал, где шифрование ROT13 производит какое-то английское слово.
- AHA ↔ NUN
- муравей ↔ nag
- Balk ↔ Onyx.
- бар ↔ один
- Барф ↔
- быть ↔ или
- Bin ↔ Ova
- ~ ↔ крыша
- зависть ↔ рельс
- er ↔ Re.
- errs ↔ риф
- Black ↔ синхронизация
- Мех ↔ она
- Гель ↔ попробуй
- Гнат ↔ Тан
- IRK ↔ VEX.
- Клерк ↔ Pyrex.
- Чисто ↔ Шерил
- PNG ↔ Cat.
- Sha ↔ веселье
- Furby ↔ Шеол
- Terra ↔ Green
- Что ↔ Юнг
- URL ↔ Эй
- Purpura ↔ чечен
- Shone ↔ Fubar.
- ARES ↔ NERF.
- avjurer ↔ никуда
Написать декодер энкодера ROT13 в Python
Так как мы программисты, мы хотим автоматизировать все. Я не хочу открывать Python каждый раз, когда вижу что-то закодированное в ROT13 и нужно написать функцию. Было бы здорово, если бы мы могли применить шифрование/дешифрование ROT13 из командной строки!
Давайте создадим скрипт, ROT13.PY , чтобы бежать всякий раз, когда мы находим текст в ROT13. Мы хотим, чтобы финальная команда выглядела так
$ python rot13.py 'text to encode/decode'
Так что нам нужно
- Создайте сценарий
ROT13.PY.
- Пройти аргументы командной строки нашему сценарию
К счастью, встроенный sys Модуль позволяет нам получить доступ к аргументам командной строки. Объект sys.argv
это список, содержащий все Аргументы переданы скрипту Отказ
# sys_file.py import sys print(f'sys.argv is: {sys.argv}') for arg_index in range(len(sys.argv)): print(f'Argument #{arg_index} is: {sys.argv[arg_index]}')
Давайте запустим это из командной строки и пропустите его аргументы
# Pass 3 arguments to sys_file.py $ python sys_file.py hello goodbye come_back sys.argv is: ['some_file.py', 'hello', 'goodbye', 'come_back!'] Argument #0 is: some_file.py Argument #1 is: hello Argument #2 is: goodbye Argument #3 is: come_back
Первый элемент sys.argv
всегда называется сценарием. Другие элементы являются аргументами, которые вы пройдены в том порядке, вы их передали. Когда вы получите доступ к этому в своем скрипте Python, он такой же, как индексация, начиная с 1. Вы доступа к первому аргументу с sys.argv [1]
Отказ
Примечание : Аргументы разделены пробелами. Таким образом come_back
это один аргумент и Верни два.
Применим это к функциям ROT13, которые мы написали ранее.
# rot13.py import sys from codecs import encode # Store 1st argument as a variable my_text = sys.argv[1] # Print out encoded version to the screen print(encode(my_text, 'rot_13'))
Мы передадим только один аргумент только к этому сценарию: строку, которую мы хотим кодировать. Мы храним это как переменную my_text
И пропустите его к функции кодирования из модуля кодеков.
Сохранить ROT13.PY
в вашем домашнем каталоге. Теперь, когда вы находите текст в ROT13, вам просто нужно открыть окно терминала и может декодировать его в течение нескольких секунд. Введите следующее в окно вашего терминала сейчас!
$ python rot13.py 'Lbh ner nznmvat!'
Куда пойти отсюда?
ROT13 – это простое метод шифрования. Он сдвигается каждый символ строки, х
13 позиций вперед в алфавите.
Он не предлагает шифрования, только запутывание. Однако это отличный способ скрыть сообщения в онлайн-форумах и частных коммуникациях. ROT13 – это специальный вариант шифра Цезаря, где функция является ее собственному обратным.
'a' >> (shift by 13 positions) >> 'n' >> (shift by 13 positions) >> 'a'
Хотите улучшить свои навыки Python до такой степени, что каждая компания программного обеспечения будет любить вас нанимать, потому что вы принадлежите к высшим коду? Проверьте Кофе-брейк Python цикл книг! Это забавный способ ускорить навыки кодирования Python очень привлекательным образом. (И мы только что достигли leanpub Bestseller Status в категории Python!)
Работая в качестве исследователя в распределенных системах, доктор Кристиан Майер нашел свою любовь к учению студентов компьютерных наук.
Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python One-listers (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.
Его страсти пишут, чтение и кодирование. Но его величайшая страсть состоит в том, чтобы служить стремлению кодер через Finxter и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.