ふと、暗号文を作りたくなったので調べながらやってみました。
特にライブラリは使用していません。
ファイル名に関してはわかりやすくango.pyとします。
(ソースコード全文)
def ango(bun,mode):
al = 'abcbdefghijklmnopqrstuvwxyz'
al2 = list(al)
el = []
el_ = []
for i in range(len(al)):
el.append(' '+str(i)+',')
al_ = str.upper(al)
al_2 = list(al)
for i in range(len(al)):
el_.append(str(i)+'_')
if mode == 0:
bun = bun[::-1]
for i in al2:
bun = bun.replace(i,el[al2.index(i)])
return bun
if mode == 1:
bun = bun.replace('.',', ')
for i in el:
k = el.index(i)
bun = bun.replace(i,al2[k])
bun = bun[::-1]
return bun
では解説に移ります。
まず一番最初の行ではdef ango(bun,mode)とすることで関数化をしています。
次に変数alにアルファベットを定義してそれをal2で一文字ごとのlistにしています。
elには0から26までの数字の後ろにコンマ、前にスペースを付け足したものをlistにしています。
そして第一引数modeで暗号を解読するのか文字列を暗号化するのかで分岐させます。
暗号化の場合は0、解読の場合は1にしてあります。
暗号化では入力された文字列(bun)の向きを反対にすることでより安全性を強めています
bun = bun[::-1]#これでより難しくなる
次にbunからa~zまでのアルファベットを数字に置換することで暗号化しています
最後にreturnで暗号化した文字列を返しています。
次に解読ではさっきとは逆に数字をアルファベットに置換した後に向きを反対にすることで元の文字列に戻します。
では試してみましょう
print(ango('hello world',0))
-->' 4, 12, 18, 15, 23, 15, 12, 12, 5, 8,'
これを解読します
print(ango(' 4, 12, 18, 15, 23, 15, 12, 12, 5, 8,',1))
-->'hello world'
成功しましたね。
実をいうと大文字も判別できるようにしたかったんですが面倒くさかったのでやめました。
どなたか大文字も使えるように改善出来たら教えていただけるとありがたいです。
実用性は全くありませんが何かワクワクしますよね。