在 Python 中实现仿射加密

PythonBeginner
立即练习

介绍

在这个项目中,你将学习如何用 Python 实现仿射加密算法。仿射密码是一种替代密码,它结合了移位密码和乘法密码的特点。它使用一种加密函数逐字母加密,提供了一种简单而有效的文本加密和解密方法。

👀 预览

示例1: welcome - > oclsaqc
示例2: welcome - > oclsaqc
示例3: Qrwe - > Qroc
示例4: 无 - > 无

🎯 任务

在这个项目中,你将学习:

  • 如何用 Python 实现仿射加密函数
  • 如何用示例输入测试仿射加密函数
  • 如何使用仿射加密函数加密用户输入

🏆 成果

完成这个项目后,你将能够:

  • 理解仿射密码的基本原理
  • 用 Python 实现仿射加密算法
  • 使用仿射加密函数对文本进行加密和解密
  • 用各种输入测试仿射加密函数

实现仿射加密函数

在这一步中,你将学习如何用 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

解释:

  • 函数首先检查输入的 text 是否为 None 或空字符串。如果是,则返回 None
  • 然后,函数根据仿射加密公式的要求设置 abm 的值。
  • 它遍历输入 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 中练习更多实验来提升你的技能。