Python入门实战:手把手教你写一个凯撒密码加密器
一、什么是凯撒密码?
凯撒密码是已知最早、最简单的加密方式之一。传说古罗马的凯撒大帝用它来保护军事通信,方法很简单:把字母表中的每个字母按照固定位数进行替换。
举个例子,如果偏移量是3:
字母 A → D
字母 B → E
字母 C → F
字母 X → A(超出字母表就从头循环)
所以 HELLO 加密后变成 KHOOR。解密就是反过来,把每个字母往前移动3位。
二、用Python实现凯撒密码
我们将用一个函数同时实现加密和解密,只需要通过参数控制方向即可。
完整代码
def caesar(text, shift, mode='encrypt'):
"""
凯撒密码加密/解密
text: 要处理的文本
shift: 偏移量(正整数)
mode: 'encrypt' 加密 / 'decrypt' 解密
"""
result = []
# 解密时偏移量取反
if mode == 'decrypt':
shift = -shift
for ch in text:
if ch.isupper():
# 大写字母:A的ASCII码是65
result.append(chr((ord(ch) - 65 + shift) % 26 + 65))
elif ch.islower():
# 小写字母:a的ASCII码是97
result.append(chr((ord(ch) - 97 + shift) % 26 + 97))
else:
# 非字母字符保持不变
result.append(ch)
return ''.join(result)
# ========== 使用示例 ==========
plaintext = "I love Python"
shift = 5
# 加密
encrypted = caesar(plaintext, shift, 'encrypt')
print(f"原文:{plaintext}")
print(f"加密(偏移{shift}):{encrypted}")
# 解密
decrypted = caesar(encrypted, shift, 'decrypt')
print(f"解密:{decrypted}")

代码逐行解释
核心公式:
加密一个字母时,先用 ord() 获取它的ASCII码,减去字母表起始值(大写65,小写97),加上偏移量,再对26取模,最后加回起始值并转回字符。
为什么要取模?因为字母表是循环的,Z 后面应该是 A,取模 % 26 保证了这一点。
运行演示
text
原文:I love Python
加密(偏移5):N qtaj Udymn
解密:I love Python
你可以把 shift 改成任意数字试试效果。
三、暴力破解凯撒密码
凯撒密码有个致命弱点:总共只有26种可能的偏移量。我们可以写一个程序把所有可能都试一遍:
python
def brute_force(ciphertext):
"""暴力破解凯撒密码,尝试所有26种偏移"""
for shift in range(1, 27):
result = caesar(ciphertext, shift, 'decrypt')
print(f"偏移{shift:2d}:{result}")
# 测试
cipher = "N qtaj Udymn"
brute_force(cipher)
运行后,你会看到26种结果,其中偏移5的解密结果 I love Python 一看就是正确的。
四、扩展思考
1. ROT13
ROT13 就是偏移13的凯撒密码。因为 13+13=26,所以加密两次就能还原,很适合用来隐藏剧透内容。
2. 凯撒密码的局限
凯撒密码在现代已经不安全了。除了暴力破解,还可以用频率分析破解——英文中字母 e 出现最多,密文中出现最多的字母很可能就是 e。
3. 下一步学什么
维吉尼亚密码:用关键字决定每次偏移多少,比凯撒安全得多
Base64编码:不是加密,但常被误认为是加密
AES:现代对称加密标准
五、总结
凯撒密码是最简单的替换加密,把字母按固定位数偏移
Python实现只需要 ord() 和 chr() 两个函数
由于只有26种可能,很容易被暴力破解
它是学习密码学和编程的绝佳入门项目
标签: #Python #密码学 #凯撒密码 #编程入门 #干货
更多推荐


所有评论(0)