一、什么是凯撒密码?
凯撒密码是已知最早、最简单的加密方式之一。传说古罗马的凯撒大帝用它来保护军事通信,方法很简单:把字母表中的每个字母按照固定位数进行替换。

举个例子,如果偏移量是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 #密码学 #凯撒密码 #编程入门 #干货

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐