介绍
在这个项目中,你将学习如何用 Python 实现仿射加密算法。仿射密码是一种替代密码,它结合了移位密码和乘法密码的特点。它使用一种加密函数逐字母加密,提供了一种简单而有效的文本加密和解密方法。
👀 预览
示例1: welcome - > oclsaqc
示例2: welcome - > oclsaqc
示例3: Qrwe - > Qroc
示例4: 无 - > 无
🎯 任务
在这个项目中,你将学习:
- 如何用 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 中练习更多实验来提升你的技能。



