挨拶
※コードは一番最後に載せています!
中田敦彦のYoutube大学を皆さんはご存じでしょうか?
最近、頭いい系の動画を見たいという願望にかられ、
よく見ているのですが、数ある動画の中で"暗号化"について
授業をされているものがありました。
まだ見られていない方はぜひおすすめします。
暗号の知識が全くない私でも楽しく見ることができました。
下記リンクから見れます。
https://www.youtube.com/watch?v=7dSVR_zuJJs&t=694s
で、その動画の中でひときわ僕の目に印象づいた言葉がありました。
そう!そこにあったのが**「カエサル暗号」!**という言葉でしたw
話を聞く限り、アルファベットの順番をある数分ずらして文章にするというのが
この暗号ルールということがわかりました。
例えば、
appleという言葉をカエサル暗号にかけると、「fuuqj」となります。
※今回は5つ右にずらした場合にしています。
aの5つ右隣りは「f」で、pの5つ右隣りは「u」で、、、と
文字の順番を利用して文章を暗号するのがカエサル暗号です。
この話を聞いていた私はうわぁ、解読するの大変そうだなぁと直感的に脳が
アラートを出していたのですが、一応私もエンジニアの端くれです。
この暗号化実際プログラムで書いたらどうやるのか気になり実際に作ってみました。
思った以上に簡単に作れちゃいました。。。
それにやってから気づいたのですが、アルファベットは
全部で27個存在します。つまり、暗号に使えるパターンは26通りしかありません。
左右も入れると52通りです。
この暗号化方法はかなりレベルが低いということを実感しました。。。。
もっと複雑なカエサル暗号のやり方はあるみたいなのですが、
アルファベットの順番を単純にN個ずらした暗号のやり方は
やめた方がいいということがわかりました。
一度も使ったことはありませんが、
今後は身内ぐらいに使うぐらいにしようと思います。w
コード
import string
#######################################
# カエサル暗号複合
def decrypt_caesar(encrypt_text, gap=1):
decrypt_text = ''
for c in encrypt_text:
number = string.ascii_lowercase.index(c)
decrypt_text += string.ascii_lowercase[number - gap]
return decrypt_text
encrypt_text = 'fuuqj'
for i in range(len(string.ascii_lowercase)):
text = decrypt_caesar(encrypt_text, i)
print(text)
#######################################
# カエサル暗号
def encrypt_caesar(decrypt_text, gap=1):
encrypt_text = ''
for c in decrypt_text:
number = string.ascii_lowercase.index(c)
search_text = string.ascii_lowercase*2
encrypt_text += search_text[number + gap]
return encrypt_text
# カエサル暗号
print(encrypt_caesar('apple', 5))