驚いたので書留めておく。Pythonのencodeとはいったい…うごごご
"abcd".encode("rot13") # => nopq
またdecryptも
"nopq".decode("rot13")
で一行で書ける。ワンライナーと呼ぶほどおしゃれなものではない。
ときにPythonでカエサル暗号というと、import thisの中身Zen of Pythonの文言が暗号化されていて、それをdecryptしてから出力しているのが有名ですね。
s = """Gur Mra bs Clguba, ol Gvz Crgref ... 省略 ... """ d = {} for c in (65, 97): for i in range(26): d[chr(i+c)] = chr((i+13) % 26 + c) print "".join([d.get(c, c) for c in s])
encode/decodeで暗号化できるとある意味便利? いやそもそもなんでこんなコーデックが入っているのだろう…。実用性とかあるのだろうか? PHPにもstr_rot13なるものがあるらしいけど。
3.x 系ではrot13は使えなくなっているとの由。やはりよろしくないということか。
さて、rot13を自力で実装する場合はmaketransがスマート。ぜんぜん違う処理になってるけど。
python - Short rot13 function - Stack Overflow
import string rot13 = string.maketrans( \ "ABCDEFGHIJKLMabcdefghijklmNOPQRSTUVWXYZnopqrstuvwxyz", \ "NOPQRSTUVWXYZnopqrstuvwxyzABCDEFGHIJKLMabcdefghijklm") string.translate("Hello World!", rot13) # 'Uryyb Jbeyq!'