Python におけるポリビウスの正方形暗号化

PythonPythonBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

このプロジェクトでは、ポリビウスの正方形暗号化アルゴリズムを実装する方法を学びます。ポリビウスの正方形は、英字アルファベットの各文字を一対の座標にマッピングする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の入力を含むさまざまな入力シナリオを処理する

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/BasicConceptsGroup(["Basic Concepts"]) python(("Python")) -.-> python/ControlFlowGroup(["Control Flow"]) python(("Python")) -.-> python/DataStructuresGroup(["Data Structures"]) python(("Python")) -.-> python/FunctionsGroup(["Functions"]) python(("Python")) -.-> python/PythonStandardLibraryGroup(["Python Standard Library"]) python/BasicConceptsGroup -.-> python/strings("Strings") python/ControlFlowGroup -.-> python/conditional_statements("Conditional Statements") python/ControlFlowGroup -.-> python/for_loops("For Loops") python/DataStructuresGroup -.-> python/lists("Lists") python/FunctionsGroup -.-> python/function_definition("Function Definition") python/PythonStandardLibraryGroup -.-> python/data_collections("Data Collections") subgraph Lab Skills python/strings -.-> lab-302701{{"Python におけるポリビウスの正方形暗号化"}} python/conditional_statements -.-> lab-302701{{"Python におけるポリビウスの正方形暗号化"}} python/for_loops -.-> lab-302701{{"Python におけるポリビウスの正方形暗号化"}} python/lists -.-> lab-302701{{"Python におけるポリビウスの正方形暗号化"}} python/function_definition -.-> lab-302701{{"Python におけるポリビウスの正方形暗号化"}} python/data_collections -.-> lab-302701{{"Python におけるポリビウスの正方形暗号化"}} end

空白を削除して小文字に変換する

このステップでは、空白を削除してすべての文字を小文字に変換することで、暗号化のための入力テキストを準備する方法を学びます。

  1. コードエディタでpolybius.pyファイルを開きます。
  2. polybius_encryption()関数に以下のコードを追加します。
## 空白を削除して小文字に変換する
text = text.replace(" ", "").lower()

これにより、入力テキストの空白が削除され、すべての文字が小文字に変換されます。

空の入力またはNoneの入力を処理する

このステップでは、入力テキストが空またはNoneの場合を処理する方法を学びます。

  1. polybius_encryption()関数の先頭に以下のコードを追加します。
if text is None:
    return None

if text == "":
    return None

これにより、入力テキストがNoneまたは空の文字列の場合、関数はNoneを返すようになります。

  1. このステップを完了すると、以下のコードが表示されます。
def polybius_encryption(text: str) -> str:
    if text is None:
        return None

    ## 空白を削除して小文字に変換する
    text = text.replace(" ", "").lower()

    if text == "":
        return None

ポリビウスの正方形を設定する

このステップでは、英字アルファベットの26文字を含む5x5のグリッドであるポリビウスの正方形を定義する方法を学びます。

  1. 前のステップの後、ポリビウスの正方形をリストのリストとして定義します。ここで、各内側のリストは正方形の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"],
]

このポリビウスの正方形は、入力テキストの文字をそれぞれに対応する座標にマッピングするために使用されます。

テキストを暗号化する

このステップでは、ポリビウスの正方形を使って入力テキストを暗号化する方法を学びます。

  1. 前のステップの後、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()関数から暗号化されたテキストを返す方法を学びます。

  1. 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ファイルを実行して暗号化する入力テキストを提供することで、コードをテストできます。

  1. polybius.pyファイルを実行して暗号化する入力テキストを提供します。
python3 polybius.py
  1. 暗号化されたテキストの出力を確認します。
## 例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でさらに多くの実験を行うことができます。