魔術師をめざして

魔術師を目指して、相場・数学・プログラム言語を研究しています。

Python でシーザー暗号

ちょっとしたわけがあって Python でシーザー暗号のプログラムを書くことになった。

f:id:fxrobot:20150216001550j:plain

Python には codecs というモジュールが標準で用意されているので、それを使って楽をしようということに。

でも、誰かが完全に動作するプログラムを書いてるんじゃないかと期待してネットを検索してみたが、日本語が扱える完全なプログラムを見つけることはできなかった。

で、まぁ、ぼくが期待した役割をぼく自身が果たしたので、ここに書いておけば誰かの役に立つかもしれない。ということで、ここに書いておくことにした。

簡単な機能だから解説はしないよ。まずは、このソースをそのままコピペして、動かしてみるとよいと思う。あとは、Python のドキュメントと適当に他のサイトを参考にすれば、お役に立つことだと思う。

最初にこのプログラムの動作例を、それに続いてプログラムの完全なソースコードを掲載した。どなたかの役に立てば幸いです。

 

1:encode 2:decode 0:exit = 1

to encode (enter:goback) = 魔神の内緒話

encoding  =  6n2H56Jr44Th5LnS57rF6Xzk

1:encode 2:decode 0:exit = 2

to decode (enter:goback) = 6n2H56Jr44Th5LnS57rF6Xzk

decodeing =  魔神の内緒話

 

#----------------------------------------------------
import codecs
import base64

def cenc(s):
    encutf8=s.encode('utf-8')
    encb64=base64.b64encode(encutf8)
    decascii=encb64.decode("ascii")
    rot13=codecs.encode(decascii, "rot13")
    return rot13

def cdec(s):
    decrot13=codecs.decode(s, 'rot13')
    decb64=base64.b64decode(decrot13)
    decutf8=decb64.decode('utf-8')
    return decutf8

if __name__ == '__main__':
    while True:
        s=input('1:encode 2:decode 0:exit = ')
        if s=='0': break
        elif s=='1':
            print()
            s=input('to encode (enter:goback) = ')
            if s=='': print(); continue
            ss=cenc(s)
            print(); print('encoding  =  {}'.format(ss)); print()
        elif s=='2':
            print()
            while True:
                s=input('to decode (enter:goback) = ')
                if s=='': print(); break
                try:
                    ss=cdec(s)
                    print()
                    print('decodeing =  {}'.format(ss))
                    print()
                except:
                    print()
                    continue
        else: print()
#----------------------------------------------------