Python 实现凯撒密码加密、解密与暴力破解详解
本文详细介绍凯撒密码的原理及其在 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 凯撒密码的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









