Кодировка 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» написать как есть.
21 июля 2011 10:34

Юджин (инкогнито)
21 июля 2011, 11:16

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

bolk (bolknote.ru)
21 июля 2011, 11:19, ответ предназначен Юджину

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

Вот JavaScript: http://bolknote.ru/2010/05/28/~2534/
Вот Perl: http://bolknote.ru/2008/03/18/~1628/
Вот Си, например: http://en.wikipedia.org/wiki/International_Obfuscated_C_Code_Contest

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

Юджин (инкогнито)
21 июля 2011, 16:35

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

bolk (bolknote.ru)
21 июля 2011, 16:42, ответ предназначен Юджину

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

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

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

agonych (agonych.livejournal.com)
22 июля 2011, 08:30

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

Lynn «Кофеман» (alexeyten.ya.ru)
22 июля 2011, 13:44

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

bolk (bolknote.ru)
22 июля 2011, 14:23, ответ предназначен Lynn «Кофеман» (alexeyten.ya.ru):

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

bolk (bolknote.ru)
22 июля 2011, 17:00, ответ предназначен Lynn «Кофеман» (alexeyten.ya.ru):

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

Ваше имя или адрес блога (можно OpenID):

Текст вашего комментария, не HTML:

Кому бы вы хотели ответить (или кликните на его аватару)