Pythonでシーザー暗号を実装する方法についてソースコード付きでまとめました。
シーザ暗号の実装例
シーザー暗号(Caesar Cipher)とは、世界初の暗号化手法で有名なシーザー(カエサル)が用いたものだそうです。
その方法は極めて単純な方法で、決められた数だけ文字をずらします。
例えば、「SAO」を1文字ずつずらせば「TBP」となります。
復号化(暗号した文章を元に戻す)は、逆向きに1文字ずつずらします。(元のSAOになります)
(シーザー暗号では、ずらす文字数が鍵(パスワード)となります)
今回は、これをPython3のchr・ord関数で実装してみます。
– | 関連ページ |
---|---|
原理 | 【シーザー暗号】原理・アルゴリズム・例題 |
参考 | ■【Python】chr・ord関数で「文字」「アスキーコード(ascii)」の相互変換 ■【ASCII】アスキーコードの一覧表 |
サンプルコード
サンプルプログラムのソースコードです。
# シーザー暗号で暗号化 def encrypt(plaintext, key): ciphertext = "" for ch in list(plaintext): if 'A' <= ch <= 'Z': ciphertext += chr((ord(ch) - ord('A') - int(key)) % 26 + ord('A')) elif 'a' <= ch <= 'z': ciphertext += chr((ord(ch) - ord('a') - int(key)) % 26 + ord('a')) else: ciphertext += ch return ciphertext # シーザー暗号で復号化 def decrypt(ciphertext, key): plaintext = "" for ch in list(ciphertext): if 'A' <= ch <= 'Z': plaintext += chr((ord(ch) - ord('A') + int(key)) % 26 + ord('A')) elif 'a' <= ch <= 'z': plaintext += chr((ord(ch) - ord('a') + int(key)) % 26 + ord('a')) else: plaintext += ch return plaintext # 平文 plaintext = "Excalibur" # 鍵 key = "1" # 平文の表示 print("平文 : " + plaintext) # 平文 : Excalibur # 暗号化 ciphertext = encrypt(plaintext, key) print("暗号文 : " + ciphertext) # 暗号文 : Dwbzkhatq # 暗号文を復号化 ciphertext = decrypt(ciphertext, key) print("復号文 : " + ciphertext) # 復号文 : Excalibur
上記の例だとキーが「1」なので平文を1文字ずらしたものが暗号文となります。
(キーが「a」ならアスキーコードは97なので、97字分ずらす)
- | 関連記事 |
---|---|
1 | ■【Python】データの暗号化・サンプル例 |
2 | ■Python入門 基本文法 |
コメント