Python でアフィン暗号化を実装する

PythonPythonBeginner
今すぐ練習

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

はじめに

このプロジェクトでは、Python でアフィン暗号化アルゴリズムを実装する方法を学びます。アフィン暗号は、シフト暗号と乗数暗号の特徴を組み合わせた置換暗号の一種です。1 文字ずつ暗号化関数を使って 1 文字ずつ暗号化し、簡単で効果的な方法でテキストを暗号化および復号化します。

👀 プレビュー

サンプル 1: welcome - > oclsaqc
サンプル 2: welcome - > oclsaqc
サンプル 3: Qrwe - > Qroc
サンプル 4: None - > None

🎯 タスク

このプロジェクトでは、以下を学びます。

  • Python でアフィン暗号化関数を実装する方法
  • サンプル入力を使ってアフィン暗号化関数をテストする方法
  • アフィン暗号化関数を使ってユーザー入力を暗号化する方法

🏆 成果

このプロジェクトを完了すると、以下ができるようになります。

  • アフィン暗号の基本原理を理解する
  • Python でアフィン暗号化アルゴリズムを実装する
  • アフィン暗号化関数を使ってテキストを暗号化および復号化する
  • 様々な入力を使ってアフィン暗号化関数をテストする

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/BasicConceptsGroup(["Basic Concepts"]) python(("Python")) -.-> python/ControlFlowGroup(["Control Flow"]) python(("Python")) -.-> python/FunctionsGroup(["Functions"]) python/BasicConceptsGroup -.-> python/strings("Strings") python/ControlFlowGroup -.-> python/conditional_statements("Conditional Statements") python/ControlFlowGroup -.-> python/for_loops("For Loops") python/FunctionsGroup -.-> python/function_definition("Function Definition") python/FunctionsGroup -.-> python/arguments_return("Arguments and Return Values") subgraph Lab Skills python/strings -.-> lab-302685{{"Python でアフィン暗号化を実装する"}} python/conditional_statements -.-> lab-302685{{"Python でアフィン暗号化を実装する"}} python/for_loops -.-> lab-302685{{"Python でアフィン暗号化を実装する"}} python/function_definition -.-> lab-302685{{"Python でアフィン暗号化を実装する"}} python/arguments_return -.-> lab-302685{{"Python でアフィン暗号化を実装する"}} end

アフィン暗号化関数を実装する

このステップでは、Python でアフィン暗号化関数を実装する方法を学びます。以下の手順に従ってこのステップを完了します。

  1. テキストエディタで affine.py ファイルを開きます。
  2. affine_encryption(text) 関数の中に、以下のコードを追加します。
def affine_encryption(text: str) -> str:
    if text is None or text == "":
        return None

    a = 5
    b = 8
    m = 26
    encryption_text = ""

    for char in text:
        if "A" <= char <= "Z" or "a" <= char <= "z":
            char = char.lower()
            x = ord(char) - ord("a")
            y = (a * x + b) % m
            encryption_text += chr(y + ord("a"))
        else:
            encryption_text += char

    return encryption_text

解説:

  • 関数はまず入力 textNone または空の文字列かどうかをチェックします。その場合は None を返します。
  • 次に関数はアフィン暗号化の式に必要な ab、および m の値を設定します。
  • 入力 text の各文字を反復処理します。
  • 文字が半角英字 ('A' から 'Z' または 'a' から 'z' の間) の場合、その文字を小文字に変換し、対応する数値 x を計算し、アフィン暗号化の式 y = (a * x + b) % m を適用し、暗号化された文字を encryption_text 文字列に追加します。
  • 文字が半角英字でない場合、そのまま encryption_text 文字列に追加されます。
  • 最後に関数は encryption_text 文字列を返します。
  1. affine.py ファイルを保存します。

アフィン暗号化関数をテストする

このステップでは、提供されたサンプル入力を使って affine_encryption() 関数をテストします。

  1. affine.py ファイルの末尾に、以下のコードを追加します。
if __name__ == "__main__":
    ## サンプル 1
    text = "welcome"
    encryption_text = affine_encryption(text)
    print(f"サンプル 1: {text} -> {encryption_text}")

    ## サンプル 2
    text = " welcome"
    encryption_text = affine_encryption(text)
    print(f"サンプル 2: {text} -> {encryption_text}")

    ## サンプル 3
    text = " Qrwe"
    encryption_text = affine_encryption(text)
    print(f"サンプル 3: {text} -> {encryption_text}")

    ## サンプル 4
    text = None
    encryption_text = affine_encryption(text)
    print(f"サンプル 4: {text} -> {encryption_text}")
  1. affine.py ファイルを保存します。
  2. ターミナルまたはコマンドプロンプトを開き、affine.py ファイルが含まれるディレクトリに移動し、以下のコマンドを実行します。
python3 affine.py

これにより、提供されたサンプル入力で affine_encryption() 関数が実行され、結果が表示されます。

出力が期待される結果と一致することを確認します。

サンプル 1: welcome -> oclsaqc
サンプル 2:  welcome ->  oclsaqc
サンプル 3:  Qrwe -> Qroc
サンプル 4: None -> None

出力が期待される結果と一致する場合、affine_encryption() 関数が正しく動作しています。

ユーザー入力を暗号化する

このステップでは、affine.py ファイルを変更して、ユーザーにテキストを入力させ、affine_encryption() 関数を使ってそれを暗号化できるようにします。

  1. affine.py ファイルの末尾の既存のコード(すなわち、if __name__ == "__main__": およびそれに続く部分)を以下のコードで置き換えます。
if __name__ == "__main__":
    text = input("暗号化するテキストを入力してください: ")
    encryption_text = affine_encryption(text)
    if encryption_text is None:
        print("エラー: 入力テキストが空です。")
    else:
        print(f"暗号化されたテキスト: {encryption_text}")

解説:

  • コードはユーザーに暗号化するテキストを入力するよう促します。
  • 次に、ユーザーの入力を使って affine_encryption() 関数を呼び出し、結果を encryption_text 変数に格納します。
  • encryption_textNone の場合(入力テキストが空だったことを意味します)、エラーメッセージを表示します。
  • それ以外の場合、暗号化されたテキストを表示します。
  1. affine.py ファイルを保存します。
  2. ターミナルまたはコマンドプロンプトを開き、affine.py ファイルが含まれるディレクトリに移動し、以下のコマンドを実行します。
python3 affine.py
  1. プロンプトが表示されたら、暗号化するテキストを入力し、出力を確認します。

おめでとうございます!あなたはアフィン暗号化関数の実装を完了し、様々な入力でそれをテストしました。

✨ 解答を確認して練習

まとめ

おめでとうございます!このプロジェクトを完了しました。あなたのスキルを向上させるために、LabEx でさらに多くの実験を行って練習してください。