Str rot13: примеры (PHP)
str_rot13(string string): stringФункция str_rot13 выполняет преобразование строки с использованием шифра ROT13. Этот алгоритм заменяет каждую латинскую букву на букву, расположенную на 13 позиций дальше в алфавите. Преобразование работает в обе стороны: повторное применение функции к уже обработанной строке возвращает исходный текст.
Основное использование функции связано с простым сокрытием текста от беглого просмотра, например, в конфигурационных файлах или для легкой обфускации данных. ROT13 не является криптографическим методом защиты и не должен использоваться для шифрования конфиденциальной информации.
Функция имеет простой синтаксис с одним обязательным параметром:
str_rot13(string $string): string
$string - исходная строка для преобразования. Функция возвращает модифицированную строку, где все латинские символы a-z и A-Z сдвинуты на 13 позиций. Остальные символы (цифры, кириллица, знаки препинания) остаются без изменений.
echo str_rot13('Hello World');Uryyb Jbeyq
echo str_rot13('Uryyb Jbeyq');Hello World
echo str_rot13('Привет 123! ABC');Привет 123! NOP
Функция strtr позволяет выполнять замены по заданному массиву соответствий. Может использоваться для создания более сложных шифров замены.
echo strtr('Hello', 'abcdefghijklmnopqrstuvwxyz', 'nopqrstuvwxyzabcdefghijklm');Uryyb
Функция base64_encode обеспечивает более надежное сокрытие данных, но выводит результат в формате, отличном от читаемого текста.
echo base64_encode('Secret');U2VjcmV0
Функции семейства hash выполняют криптографическое хеширование без возможности обратного преобразования.
ROT13 стоит выбирать для задач легкого сокрытия текста, где важна читаемость после обратного преобразования без использования ключей. Для серьезной защиты данных необходимы другие методы.
Наиболее частая ошибка - попытка использовать ROT13 для не-латинских символов.
echo str_rot13('Привет мир');Привет мир
При работе с многобайтовыми кодировками могут возникать проблемы, если строка содержит символы вне ASCII.
echo str_rot13('Café'); // символ 'é' останется без измененийPnsé
Использование ROT13 для защиты конфиденциальных данных является серьезной ошибкой безопасности.
Функция str_rot13 присутствует в PHP с версии 4.2.0. За время существования не претерпела значительных изменений в поведении или синтаксисе. В PHP 8 была улучшена общая производительность интерпретатора, что косвенно могло повлиять на скорость работы функции, но ее API остался неизменным.
Применение функции ко всем элементам массива с помощью array_map.
$messages = ['Hello', 'Test', 'PHP'];
$encoded = array_map('str_rot13', $messages);
print_r($encoded);Array
(
[0] => Uryyb
[1] => Grfg
[2] => CUC
)Многократное применение функции возвращает исходную строку через четное число вызовов.
$text = 'Secret Message';
$once = str_rot13($text);
$twice = str_rot13($once);
echo $once . ' | ' . $twice;Frperg Zrffntr | Secret Message
Создание простой двухэтапной обфускации.
function obscure($str) {
return str_rot13(base64_encode($str));
}
function clarify($str) {
return base64_decode(str_rot13($str));
}
echo obscure('Data');QnFn
Использование для временного скрытия спойлеров в тексте.
$spoiler = 'Итог фильма: главный герой был призраком';
$hidden = str_rot13($spoiler);
echo 'Спойлер: ' . $hidden . '<br>';
echo 'Раскрыть: ' . str_rot13($hidden);Спойлер: Ыттф туйьнз: туншызй тубй цнк чымнфэнцб Раскрыть: Итог фильма: главный герой был призраком
Демонстрация работы только с определенными диапазонами символов.
echo str_rot13('A-M -> N-Z, a-m -> n-z');N-Z -> A-M, n-z -> a-m
Str rot13 в Python
Модуль codecs предоставляет функцию encode с кодеком 'rot_13'.
import codecs
print(codecs.encode('Hello', 'rot_13'))Uryyb
Str rot13 в Javascript
В JavaScript отсутствует встроенная функция, но реализация может быть создана с использованием метода replace.
function rot13(str) {
return str.replace(/[a-z]/gi, letter => String.fromCharCode(letter.charCodeAt(0) + (letter.toLowerCase() <= 'm' ? 13 : -13)));
}
console.log(rot13('Hello'));Uryyb
Str rot13 в MySQL
Прямого аналога нет, но можно создать пользовательскую функцию. В PostgreSQL существует функция translate для похожих задач замены символов.
В отличие от PHP, где функция является встроенной, в большинстве других языков требуется самостоятельная реализация или подключение дополнительных модулей. Алгоритм ROT13 везде работает идентично для латинского алфавита.