Python 实现凯撒密码加密、解密与暴力破解详解

Nora
Nora
发布时间:2026-10-14| 5人浏览过
原创

本文详细介绍凯撒密码的原理及其在 Python 中的完整实现。涵盖加密与解密逻辑,通过偏移量替换字符。同时提供暴力破解代码,遍历所有可能偏移量以恢复明文。包含完整源代码、运行示例及安全性分析,适合 Python 初学者学习基础密码学编程。

凯撒密码原理与安全性分析

凯撒密码属于一种基础的替换加密算法。其核心机制是将明文中的每个字符,依据字母表顺序向左或向右移动固定的位数,从而生成对应的密文字符。

以偏移量为 3 为例,明文中的字母 A 会被转换为 D,B 转换为 E,其余字母依此类推进行替换。

若已知加密时的偏移量,接收方可通过逆向运算,快速将密文还原为原始明文。

以下两张图展示了偏移量为 8 时的对应关系:图一为凯撒密码轮盘,外层表示明文,内层表示密文,通过旋转轮盘可调整偏移量;图二展示了具体的加密流程。

需要注意的是,对同一段明文连续应用多个不同偏移量的凯撒加密,并不能提升安全性。多次旋转轮盘的效果等同于最终抵消后的单次旋转,其复杂度并未增加,因此仍易受暴力破解攻击。

例如,先对明文进行偏移 3 位的加密,再对生成的密文进行偏移 10 位的加密,其最终效果等同于直接对原始明文进行偏移 13 位的加密。

Python 凯撒密码加密解密实现

二、Python 实现凯撒密码

源代码:


while True:
 key = input("Please input a key number (like 13):\n") or 13
 mode = input("\nPlease input mode (encrypt or decrypt):\n") or "encrypt"

 symbols = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890 !?.'
 # 根据数字 key 对字母表 symbols 进行偏移操作,形成密文字母表 ciphers
 ciphers = symbols[int(key):] + symbols[:int(key)]
 # 根据加密与解密动作,生成明文字母到密文字母(或密文到明文)的对应关系
 transtab = str.maketrans(symbols, ciphers) if mode == 'encrypt' else str.maketrans(ciphers, symbols)

 message = input("\nPlease input plaintext or ciphertext:\n")
 # 完成明文到密文(或密文到明文)的转换
 result = message.translate(transtab)
 print(f"\nThe result is: {result}\n\n")

运行效果如下:

Please input a key number (like 13): 13

Please input mode (encrypt or decrypt): encrypt

Please input plaintext or ciphertext: This is my secret message.

The result is: guv6Jv6Jz!J6rp5r7Jzr66ntrM

Please input a key number (like 13): 13

Please input mode (encrypt or decrypt): decrypt

Please input plaintext or ciphertext: guv6Jv6Jz!J6rp5r7Jzr66ntrM

The result is: This is my secret message.

Python 凯撒密码暴力破解方法

三、Python 对凯撒密码的爆破

当加密使用的 key 值未知时,可通过尝试所有可能的 key 值(从 0 到字母表长度减一)对密文进行解密,并输出结果以判断哪一个是具有实际意义的明文。

源代码:


symbols = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890 !?.'

ciphertext = input("Please input ciphertext:\n")


for key in range(len(symbols)):
 ciphers = symbols[key:] + symbols[:key]
 transtab = str.maketrans(ciphers, symbols)
 plaintext = ciphertext.translate(transtab)

 print(f'Key #{key}: {plaintext}')

运行效果如下:

Please input ciphertext: guv6Jv6Jz!J6rp5r7Jzr66ntrM Key #0: guv6Jv6Jz!J6rp5r7Jzr66ntrM Key #1: ftu5Iu5Iy I5qo4q6Iyq55msqL Key #2: est4Ht4Hx0H4pn3p5Hxp44lrpK Key #3: drs3Gs3Gw9G3om2o4Gwo33kqoJ Key #4: cqr2Fr2Fv8F2nl1n3Fvn22jpnI Key #5: bpq1Eq1Eu7E1mkzm2Eum11iomH Key #6: aopzDpzDt6Dzljyl1DtlzzhnlG Key #7: ZnoyCoyCs5CykixkzCskyygmkF Key #8: YmnxBnxBr4BxjhwjyBrjxxfljE Key #9: XlmwAmwAq3AwigvixAqiwwekiD Key #10: Wklv.lv.p2.vhfuhw.phvvdjhC Key #11: Vjku?ku?o1?ugetgv?oguucigB Key #12: Uijt!jt!nz!tfdsfu!nfttbhfA Key #13: This is my secret message. Key #14: Sghr0hr0lx0rdbqds0ldrrZfd? Key #15: Rfgq9gq9kw9qcapcr9kcqqYec! ...

参考资料

Cracking Codes with Python

以上就是python 密码学示例——凯撒密码的实现的详细内容,更多关于python 凯撒密码的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。