Python入門トップページ


目次

  1. プログラミング言語
  2. Anaconda - Jupyter Notebook / JupyterLab の環境設定
  3. Python の基礎
  4. リスト,タプル,辞書,集合
  5. 再び Jupyter Notebook の操作
  6. Python の制御構文
  7. 関数
  8. 便利な関数など
  9. リストの内包表記
  10. 多次元リスト
  11. クラス
  12. 演習問題
  13. 雑多な情報

Python の基礎

雑多な情報

シーザー暗号で暗号文を作ってみる

シーザー暗号 (Caesar cipher) は平文(ひらぶん)の各文字を3文字分ずらして暗号文を作成するという非常にシンプルな暗号です.例えば,アルファベットの「...OPQRSTUVW...」という並びを考えたとき,「U」という文字を3文字分左にずらして「R」に置き換えて暗号文を作成します.

目次に戻る

暗号化してみよう

Python で文字をずらす処理は,(1) 文字コードを取得し,(2) その文字コードから3を引く,(3) 引き算で得られた文字コードを文字に変換する,という手順で行えます.したがって,「U」という文字を「R」に変換する処理は次のように記述すれば良いことになります.

s = 'U'
chr(ord(s) - 3)
'R'

なお,文字コードを取得する ord() 関数の説明はここを,文字コードから文字に変換する chr() 関数の説明はここを参照してください.

この手順を使って「UNIVERSITY」という平文 (plaintext) を暗号化して暗号文 (ciphertext) を作成してみましょう.

plaintext = 'UNIVERSITY'  # 平文を設定
ciphertext = ''  # 暗号文を初期化
for j in range(len(plaintext)):
    s = chr(ord(plaintext[j]) - 3) # 3文字左にずらす
    ciphertext += s  # 暗号文に文字を追加する
print(ciphertext)
RKFSBOPFQV

この結果「RKFSBOPFQV」という暗号文が得られました.

目次に戻る

復号してみよう

次は,上で得られたシーザー暗号の「RKFSBOPFQV」という暗号文を復号してみましょう.暗号化では左に3文字ずらしたので,復号では右に3文字ずらすだけです.つまり,上のコードの4行目にある - 3+ 3 に変更するだけです.なお,以下のプログラムは変数の名前も置き換えています.

ciphertext = 'RKFSBOPFQV'  # 暗号文を設定
plaintext = ''  # 平文を初期化
for j in range(len(ciphertext)):
    s = chr(ord(ciphertext[j]) + 3) # 3文字右にずらす
    plaintext += s  # 平文に文字を追加する
print(plaintext)
UNIVERSITY

この結果「UNIVERSITY」という平文を得ることができました.

シーザー暗号は非常に単純なアルゴリズムであるため,現代ではシーザー暗号がそのまま用いられることはありません.しかしながら,シーザー暗号を通して暗号化や復号のイメージを掴むことは重要かもしれません.

目次に戻る