はじめに
このプロジェクトでは、ポリビウスの正方形暗号化アルゴリズムを実装する方法を学びます。ポリビウスの正方形は、英字アルファベットの各文字を一対の座標にマッピングする 5x5 のグリッドです。この方法を使ってテキストを暗号化することで、ポリビウスの正方形を知っている人だけが解読できる暗号化メッセージを作成できます。
👀 プレビュー
## 例1
text = "tynam"; encryption_text = "4454331132"
## 例2
text = "tynam123"; encryption_text = "4454331132123"
## 例3
text = "TYnam"; encryption_text = "4454331132"
## 例4
text = None; encryption_text = None
🎯 タスク
このプロジェクトでは、以下を学びます。
- ポリビウスの正方形を定義する方法
- 空白を削除し、テキストを小文字に変換する方法
- 空の入力または
Noneの入力を処理する方法 - ポリビウスの正方形を使ってテキストを暗号化する方法
- 暗号化されたテキストを返す方法
🏆 成果
このプロジェクトを完了すると、以下のことができるようになります。
- ポリビウスの正方形暗号化アルゴリズムの概念を理解する
- Python でポリビウス暗号化アルゴリズムを実装する
- ポリビウスの正方形を使ってテキストを暗号化および復号化する
- 空の入力または
Noneの入力を含むさまざまな入力シナリオを処理する
空白を削除して小文字に変換する
このステップでは、空白を削除してすべての文字を小文字に変換することで、暗号化のための入力テキストを準備する方法を学びます。
- コードエディタで
polybius.pyファイルを開きます。 polybius_encryption()関数に以下のコードを追加します。
## 空白を削除して小文字に変換する
text = text.replace(" ", "").lower()
これにより、入力テキストの空白が削除され、すべての文字が小文字に変換されます。
空の入力または None の入力を処理する
このステップでは、入力テキストが空またはNoneの場合を処理する方法を学びます。
polybius_encryption()関数の先頭に以下のコードを追加します。
if text is None:
return None
if text == "":
return None
これにより、入力テキストがNoneまたは空の文字列の場合、関数はNoneを返すようになります。
- このステップを完了すると、以下のコードが表示されます。
def polybius_encryption(text: str) -> str:
if text is None:
return None
## 空白を削除して小文字に変換する
text = text.replace(" ", "").lower()
if text == "":
return None
ポリビウスの正方形をセットアップする
このステップでは、英字アルファベットの 26 文字を含む 5x5 のグリッドであるポリビウスの正方形を定義する方法を学びます。
- 前のステップの後、ポリビウスの正方形をリストのリストとして定義します。ここで、各内側のリストは正方形の 1 行を表します。
polybius_square = [
["a", "b", "c", "d", "e"],
["f", "g", "h", "ij", "k"],
["l", "m", "n", "o", "p"],
["q", "r", "s", "t", "u"],
["v", "w", "x", "y", "z"],
]
このポリビウスの正方形は、入力テキストの文字をそれぞれに対応する座標にマッピングするために使用されます。
テキストを暗号化する
このステップでは、ポリビウスの正方形を使って入力テキストを暗号化する方法を学びます。
- 前のステップの後、
polybius_encryption()関数に以下のコードを追加します。
encrypted_text = ""
for char in text:
if char.isalpha():
for i, row in enumerate(polybius_square):
for j, ch in enumerate(row):
if char in ch:
encrypted_text += str(i + 1) + str(j + 1)
else:
encrypted_text += char
このコードは、入力テキストの各文字を反復処理します。文字がアルファベットの場合、ポリビウスの正方形内の対応する座標を見つけて、それらをencrypted_text文字列に追加します。文字がアルファベットでない場合、そのままencrypted_text文字列に追加されます。
暗号化されたテキストを返す
この最後のステップでは、polybius_encryption()関数から暗号化されたテキストを返す方法を学びます。
polybius_encryption()関数の末尾に以下の行を追加します。
return encrypted_text
これにより、暗号化されたテキストが関数の出力として返されます。
この時点で、完全なpolybius_encryption()関数は以下のようになっているはずです。
def polybius_encryption(text: str) -> str:
if text is None:
return None
## 空白を削除して小文字に変換する
text = text.replace(" ", "").lower()
if text == "":
return None
## ポリビウスの正方形を定義する
polybius_square = [
["a", "b", "c", "d", "e"],
["f", "g", "h", "ij", "k"],
["l", "m", "n", "o", "p"],
["q", "r", "s", "t", "u"],
["v", "w", "x", "y", "z"],
]
encrypted_text = ""
for char in text:
if char.isalpha():
for i, row in enumerate(polybius_square):
for j, ch in enumerate(row):
if char in ch:
encrypted_text += str(i + 1) + str(j + 1)
else:
encrypted_text += char
return encrypted_text
if __name__ == "__main__":
txt = input()
print(polybius_encryption(txt))
これで、ポリビウス暗号化アルゴリズムの実装が完了しました。polybius.pyファイルを実行して暗号化する入力テキストを提供することで、コードをテストできます。
polybius.pyファイルを実行して暗号化する入力テキストを提供します。
python3 polybius.py
- 暗号化されたテキストの出力を確認します。
## 例1
text = "tynam"; encryption_text = "4454331132"
## 例2
text = "tynam123"; encryption_text = "4454331132123"
## 例3
text = "TYnam"; encryption_text = "4454331132"
## 例4
text = None; encryption_text = None
おめでとうございます!Python でポリビウス暗号化アルゴリズムを正常に実装しました。
まとめ
おめでとうございます!このプロジェクトを完了しました。あなたは実験技術を向上させるために LabEx でさらに多くの実験を行うことができます。



