Кодировка rot13 в Пайтоне
В стандартном интерпретаторе Пайтона есть много такого, что иначе как «пасхальным яйцом» не назовёшь. Например, можно попробовать импортировать модули «__hello__», «this» или сделать «from __future__ import braces» (попробуйте), но следующее просто гениально, хотя, видимо, получилось случайно.
В файле программы на Пайтоне в специальном коментарии принято указывать кодировку файла. В случае с латиницей работает и без этого, если применяется UTF-8, то это делать обязательно. Интерпретатор поддерживает множество кодировок (честно сказать, я не знаю сколько именно) и одна из них — rot13. Используются те же самые кодировки, что и в методах encode и decode у строки. Я думаю после считывания файла программы именно они и вызываются.
Вот вполне валидная программа, которая выполняется и делает нечто осмысленное:
# coding: rot13
vzcbeg __uryyb__
cevag "Zl anzr vf Ritral Fgrcnavfpuri nxn Obyx!".rapbqr("rot13")
Кодируется только текст программы, поэтому-то мне и пришлось «rot13» написать как есть.
В перле с source filters народ подобным образом давно развлекается. См. Acme-Filter-Kenny или Acme-Bleach например
Комментарий для Юджин:
Ну, мало ли кто в каких языках как развлекается.
Вот JavaScript: http://bolknote.ru/all/2534/
Вот Perl: http://bolknote.ru/all/1628/
Вот Си, например: http://en.wikipedia.org/wiki/International_Obfuscated_C_Code_Contest
Ещё неясно что круче. Дело-то не в этом.
Я ничего не сравниваю. Это скорее к «но следующее просто гениально, хотя, видимо, получилось случайно.» комментарий. Вряд ли уж случайно совсем.
Хотя любопытно можно ли в питоне самому добавлять кодировщики/раскодировщики на самом же питоне писанные.
Комментарий для Юджин:
Скорее всего — совсем случайно. encode/decode — это методы, которые занимаются переводом из/в разные кодировки в Пайтоне. Логично, что там есть rot13, base64, zlib, помимо utf-8, cp1251 и так далее.
Этими же самыми методами рекодируется исходник программы, поскольку rot13 есть в списке поддерживаемых кодировок, то и исходник можно писать в этой кодировке.
Именно поэтому это и гениально. Что вот так здорово всё совпало.
Poor man’s source code protection :) Может, кстати, и прокатить против какого-нибудь ламера-заказчика.
Что-то с base64 не получается :(
Комментарий для alexeyten.ya.ru:
Попробую потом. Может и не получится.
Комментарий для alexeyten.ya.ru:
Всё-таки нельзя, наверное. Base64 очень уж капризный в Пайтоне :)