Пишу, по большей части, про историю, свою жизнь и немного про программирование.

Кодировка 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» написать как есть.

8 комментариев
Юджин 2011

В перле с source filters народ подобным образом давно развлекается. См. Acme-Filter-Kenny или Acme-Bleach например

Евгений Степанищев (bolknote.ru) 2011

Комментарий для Юджин:

Ну, мало ли кто в каких языках как развлекается.

Вот JavaScript: http://bolknote.ru/all/2534/
Вот Perl: http://bolknote.ru/all/1628/
Вот Си, например: http://en.wikipedia.org/wiki/International_Obfuscated_C_Code_Contest

Ещё неясно что круче. Дело-то не в этом.

Юджин 2011

Ещё неясно что круче. Дело-то не в этом.

Я ничего не сравниваю. Это скорее к «но следующее просто гениально, хотя, видимо, получилось случайно.» комментарий. Вряд ли уж случайно совсем.
Хотя любопытно можно ли в питоне самому добавлять кодировщики/раскодировщики на самом же питоне писанные.

Евгений Степанищев (bolknote.ru) 2011

Комментарий для Юджин:

Вряд ли уж случайно совсем.

Скорее всего — совсем случайно. encode/decode — это методы, которые занимаются переводом из/в разные кодировки в Пайтоне. Логично, что там есть rot13, base64, zlib, помимо utf-8, cp1251 и так далее.

Этими же самыми методами рекодируется исходник программы, поскольку rot13 есть в списке поддерживаемых кодировок, то и исходник можно писать в этой кодировке.

Именно поэтому это и гениально. Что вот так здорово всё совпало.

agonych (agonych.livejournal.com) 2011

Poor man’s source code protection :) Может, кстати, и прокатить против какого-нибудь ламера-заказчика.

Lynn «Кофеман» (alexeyten.ya.ru) 2011

Что-то с base64 не получается :(

Евгений Степанищев (bolknote.ru) 2011

Комментарий для alexeyten.ya.ru:

Попробую потом. Может и не получится.

Евгений Степанищев (bolknote.ru) 2011

Комментарий для alexeyten.ya.ru:

Всё-таки нельзя, наверное. Base64 очень уж капризный в Пайтоне :)