什么是凯撒密码
凯撒密码是一种单表替换:每个字母由固定距离后的字母代替。位移 3 时 A 变 D,X、Y、Z 会回绕为 A、B、C;解码按相同位移向反方向移动。
本实现精确定义字母表为 26 个 ASCII 英文字母 A-Z 和 a-z。保留大小写,数字、空格、标点、重音字符、中文和 emoji 原样复制。任意整数位移按模 26 规范化。
它绝不是安全加密。包括不变位移在内只有 26 种可能,语言模式也保持明显。适合教学、谜题和历史示例,不得用于密码、令牌、个人数据或任何需要保密的内容。
如何编码或解码凯撒位移
- 向前移动选择编码,向后恢复选择解码。
- 输入整数位移,超出 0-25 的值按模 26 处理。
- 输入文本,结果会保留大小写和所有非 ASCII 字母。
- 点击 ROT13 把位移设为 13;编码与解码效果相同。
- 位移未知时可尝试全部 26 种结果,这正说明其安全性极弱。
凯撒位移与 ROT13 示例
示例覆盖字母回绕、大小写、等价的大位移、非英文字符、解码方向和 ROT13 的自反性质。
经典位移 3
输入: Attack at Dawn!
输出: Dwwdfn dw Gdzq!
大小写分别移动,空格与标点保持不变。
解码位移 3
输入: Dwwdfn dw Gdzq!
输出: Attack at Dawn!
解码会减去规范化位移,无需手动输入负数。
字母表回绕
输入: xyz XYZ
输出: abc ABC
超过 z 或 Z 后回到同一大小写字母表开头。
ROT13
输入: Hello, World!
输出: Uryyb, Jbeyq!
13 加 13 等于 26,因此执行两次恢复原文。
大位移规范化
输入: abc
输出: def
位移 29 按模 26 等价于位移 3。
保留非字母
输入: Hello, 世界! 123
输出: Khoor, 世界! 123
只移动 ASCII A-Z/a-z,其他字符原样保留。
位移范围与字符行为
位移必须是有限整数,通过正模运算变为 0-25。解码位移 3 等价于编码位移 23。
只转换 ASCII A-Z/a-z。扩展到其他语言必须先定义有序字母表和语言规则,本工具不会随意旋转 Unicode。
- 位移 0 与 26 的倍数返回原文。
- 位移 13 是 ROT13,执行两次恢复。
- 大写保持大写,小写保持小写。
- 空格、标点、数字、emoji 和非拉丁文字原样保留。
- 小数、无穷大或非数字位移非法。
模 26 字母旋转原理
每个 ASCII 字母先转成 0-25 的索引。编码加上规范化位移并取模 26,再转换回相同大小写字符。
解码可直接减位移,也可加上 26-shift 的补数;后者避免负中间值。回绕来自模运算,不需要为 X、Y、Z 单独写规则。
函数按 Unicode 码点遍历,但只处理 ASCII 字母。没有密钥扩展、随机数、nonce、认证标签或秘密状态,全部“密钥空间”就是可见位移。
凯撒密码的合理用途
它用极少规则展示替换和模运算,弱点本身就是教学内容。
课堂练习
演示字母索引、回绕、频率分析和编码与安全加密的区别。
谜题与密室
制作本来就允许通过少量尝试恢复的线索。
ROT13 社区惯例
在明确不保密的场景轻度遮挡剧透或笑点。
编程练习
测试字符串遍历、大小写、负数取模和可逆变换。
历史演示
说明人工时代的方法为何无法抵抗现代计算。
凯撒密码限制与常见误用
最大错误是把结果当机密。遍历所有位移几乎不耗时,语言评分还能自动找出最可能原文;重复字母、词长和标点也完全保留。
操作错误通常是方向或位移不匹配。编码 23 与解码 3 等价,规范化规则有助于解释这些看似不同的设置。
- 错误位移只产生另一种可逆替换,不会出现完整性错误。
- 密码本身无法判断解码文本是否正确。
- 非英文字母不会被放入虚构字母表。
- ROT13 只是混淆。
- 不要用于秘密、认证、存储保护或安全传输。
凯撒、ROT13 与现代加密
ROT13 就是位移 13 的凯撒密码,因为 13+13=26,所以编码和解码相同。Atbash 则反转字母表,不是固定旋转,但同样不安全。
AES-GCM、ChaCha20-Poly1305 等现代认证加密使用大密钥、nonce 和完整性标签,并假设攻击者知道算法。凯撒只有 26 个位移且无认证。
ROT13
固定 13 位移,用于轻度混淆,安全性与其他凯撒位移相同。
Atbash
A 对 Z、B 对 Y 的固定替换,同样不安全。
认证加密
使用真实秘密密钥和完整性验证,应调用维护中的密码学库。