はじめに
このプロジェクトでは、Python でアフィン暗号化アルゴリズムを実装する方法を学びます。アフィン暗号は、シフト暗号と乗数暗号の特徴を組み合わせた置換暗号の一種です。1 文字ずつ暗号化関数を使って 1 文字ずつ暗号化し、簡単で効果的な方法でテキストを暗号化および復号化します。
👀 プレビュー
サンプル 1: welcome - > oclsaqc
サンプル 2: welcome - > oclsaqc
サンプル 3: Qrwe - > Qroc
サンプル 4: None - > None
🎯 タスク
このプロジェクトでは、以下を学びます。
- Python でアフィン暗号化関数を実装する方法
- サンプル入力を使ってアフィン暗号化関数をテストする方法
- アフィン暗号化関数を使ってユーザー入力を暗号化する方法
🏆 成果
このプロジェクトを完了すると、以下ができるようになります。
- アフィン暗号の基本原理を理解する
- Python でアフィン暗号化アルゴリズムを実装する
- アフィン暗号化関数を使ってテキストを暗号化および復号化する
- 様々な入力を使ってアフィン暗号化関数をテストする
アフィン暗号化関数を実装する
このステップでは、Python でアフィン暗号化関数を実装する方法を学びます。以下の手順に従ってこのステップを完了します。
- テキストエディタで
affine.pyファイルを開きます。 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
解説:
- 関数はまず入力
textがNoneまたは空の文字列かどうかをチェックします。その場合はNoneを返します。 - 次に関数はアフィン暗号化の式に必要な
a、b、およびmの値を設定します。 - 入力
textの各文字を反復処理します。 - 文字が半角英字 ('A' から 'Z' または 'a' から 'z' の間) の場合、その文字を小文字に変換し、対応する数値
xを計算し、アフィン暗号化の式y = (a * x + b) % mを適用し、暗号化された文字をencryption_text文字列に追加します。 - 文字が半角英字でない場合、そのまま
encryption_text文字列に追加されます。 - 最後に関数は
encryption_text文字列を返します。
affine.pyファイルを保存します。
アフィン暗号化関数をテストする
このステップでは、提供されたサンプル入力を使って affine_encryption() 関数をテストします。
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}")
affine.pyファイルを保存します。- ターミナルまたはコマンドプロンプトを開き、
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() 関数を使ってそれを暗号化できるようにします。
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_textがNoneの場合(入力テキストが空だったことを意味します)、エラーメッセージを表示します。- それ以外の場合、暗号化されたテキストを表示します。
affine.pyファイルを保存します。- ターミナルまたはコマンドプロンプトを開き、
affine.pyファイルが含まれるディレクトリに移動し、以下のコマンドを実行します。
python3 affine.py
- プロンプトが表示されたら、暗号化するテキストを入力し、出力を確認します。
おめでとうございます!あなたはアフィン暗号化関数の実装を完了し、様々な入力でそれをテストしました。
まとめ
おめでとうございます!このプロジェクトを完了しました。あなたのスキルを向上させるために、LabEx でさらに多くの実験を行って練習してください。



