破解谜题线索
参加线上密室逃脱时,收到一张纸条:『WKH ODUJH LV LQ WKH OLIBUDUB』。队友猜是字母移位,但不知道具体偏移了几位。本工具一键暴力破解所有 25 种偏移,瞬间发现这是偏移 3 的凯撒密码,原文是『THE LARGE IS IN THE LIBRARY』,直接锁定下一关目标。
收到一段密文,不确定是凯撒移位还是乱码。这个工具把字母表按1到25位依次移位,同时展示所有可能结果——一眼扫过去,有意义的英文句子就是原文。纯浏览器运算,密文不离开本地。
参加线上密室逃脱时,收到一张纸条:『WKH ODUJH LV LQ WKH OLIBUDUB』。队友猜是字母移位,但不知道具体偏移了几位。本工具一键暴力破解所有 25 种偏移,瞬间发现这是偏移 3 的凯撒密码,原文是『THE LARGE IS IN THE LIBRARY』,直接锁定下一关目标。
从二手网站买来的老游戏光盘,安装后发现存档文件被加密,文件名全是『QEB NRFZH YOLTK CLU』这种乱码。怀疑是游戏作者用简单移位保护存档。用本工具逐一尝试 1-25 偏移,在偏移 23 时得到『THE OLD CASTLE KEY』,确认是存档密码,成功打开隐藏关卡。
整理祖父遗物时发现一本 1960 年代的笔记本,每页开头都有一行字母,如『PDUNHW』。怀疑是祖父年轻时用的简易密码。本工具暴力破解显示偏移 3 为『MARKET』,偏移 17 为『DARKER』。结合笔记内容判断偏移 3 是正确解读,确认这是当年供销社的货物代号本。
在某技术论坛找到一个 2008 年的旧帖,内容被发帖人用凯撒密码加密,只有『ZKDW LV WKH VHFUHW』一行。原帖回复里有人提示『偏移 19』,但回复已被删除。本工具暴力破解所有偏移,在偏移 19 下得到『WHAT IS THE SECRET』,成功还原帖子正文,解决了困扰多年的技术难题。
朋友发来一条密文『SXOHQ』,声称是『SILENT』的凯撒密码。用本工具验证:偏移 1 得『TYPMR』,偏移 2 得『UZQNS』,直到偏移 10 才得到『SXOHQ』。但『SILENT』偏移 10 应为『CSVODX』,两者不符。由此发现朋友记错了偏移值,实际是偏移 16 的『SILENT』,纠正了沟通错误。
| 维度 | 本工具 | 在线凯撒工具站 | 手工计算 |
|---|---|---|---|
| 暴力破解 | 一键穷举 1-25 偏移并显示明文 | 多数需逐条手动试偏移 | 需纸笔逐偏移推算,耗时长 |
| 隐私 | 纯浏览器运算,原文不上传服务器 | 部分工具上传原文至后端解密 | 完全离线,无网络依赖 |
| 速度 | 毫秒级完成 25 次移位并输出 | 单次移位约 0.5-1 秒 | 每个偏移约 30 秒-1 分钟 |
| 输入限制 | 无长度上限,支持任意文本 | 部分限制 500-2000 字符 | 无限制,但手算越长越慢 |
| 注册要求 | 无需注册,打开即用 | 少数需要登录或付费解锁批量 | 无需任何注册 |
| 输入 | 输出 | 说明 |
|---|---|---|
| HELLO(移位3) | KHOOR | 常规:典型英文单词,验证基本移位功能(3位) |
| HELLO(暴力破解所有偏移) | 偏移1: IFMMP 偏移2: JGNNQ 偏移3: KHOOR ... 偏移25: GDKKN | 常规:暴力破解模式,展示所有25种可能结果,用户可从中找到原文 |
| ABC(移位25) | ZAB | 边界:移位25接近循环边界(26字母),验证回绕逻辑正确性 |
| (空输入) | (无输出或提示“请输入文本”) | 边界:空输入处理,避免程序报错或产生意外结果 |
| 123!@#(移位5) | 123!@# | 边界:非字母字符(数字、符号)保持不变,验证工具是否仅处理字母 |
| Z(移位1) | A | 易错:末尾字母Z移位后回绕到A,用户常误以为会变成[或超出范围 |
| aBc(移位3) | dEf | 易错:大小写混合输入,验证工具是否保留原始大小写(而非统一转大写/小写) |
1.混淆移位方向:加密用左移,解密用右移
密文是“khoor”,想解密回“hello”,却尝试左移3位得到“ebiil”密文“khoor”应右移3位(或左移23位)得到“hello”凯撒密码加密是字母表向右循环移位(A→D),解密则反向。方向搞反会导致结果完全错误,且暴力破解时也找不到正确原文。
2.未区分大小写,导致结果乱码
输入“Hello World”加密,结果得到“Khoor Zruog”,但实际期望“Khoor Zruog”中的W被错误处理输入“Hello World”时,工具自动保持大小写,加密后为“Khoor Zruog”凯撒密码只变换字母,大小写应保留。若工具未处理大小写,大写字母会移出大写范围变成小写,破坏格式。
3.对非字母字符(数字、标点)也做移位
输入“abc123”,加密后得到“def456”输入“abc123”,加密后应保留数字,结果为“def123”凯撒密码只对英文字母移位,数字、空格、标点应原样保留。对非字母字符移位会破坏可读性,且解密后无法恢复。
4.暴力破解时忽略空格与标点,误判正确结果
暴力破解结果列表中有“khoor zruog”,认为它是对的,但实际原文是“hello world”暴力破解应输出所有偏移结果,包括保留空格的“khoor zruog”和去掉空格的“khoorzruog”,用户需人工选择暴力破解只是机械移位,不会自动识别语义。若结果中空格被错误处理,可能干扰判断。正确做法是检查所有偏移,看哪一组形成有意义的单词。
5.误以为凯撒密码支持中文或Unicode字符
输入“你好世界”,期望加密成“中好世界”或类似结果凯撒密码只支持A-Z/a-z,输入中文会原样输出或报错凯撒密码是古典单表替换密码,只对拉丁字母表循环移位。中文、日文等非字母字符无法处理,工具应提示仅支持英文字母。
6.移位量超出0-25范围,导致循环错误
输入移位量26,认为26=0,结果密文与原文相同移位量应限制在1-25之间,26等价于0(无变化),27等价于1凯撒密码的移位量是模26运算,26≡0,27≡1。超出范围虽可模26处理,但用户若手动输入26会误以为加密有效,实际未加密。
7.暴力破解时误以为只有一种正确结果
暴力破解输出25个结果,用户只看第一个就说“没有找到”暴力破解应展示所有25个偏移结果,用户需逐条检查是否有可读英文凯撒密码的暴力破解是穷举所有可能偏移,正确结果一定在列表中。若用户只扫一眼就放弃,可能漏掉正确偏移。
C_i = (P_i + k) mod 26
C_i密文字母在字母表中的位置(0-25)P_i明文字母在字母表中的位置(0-25)k移位量,整数 1 到 25明文 'HELLO',移位 k=3。H(7)→(7+3) mod 26=10→K;E(4)→7→H;L(11)→14→O;L(11)→14→O;O(14)→17→R。密文 'KHOOR'。
5 种主流语言实现,复制即用:
import string
def caesar_encrypt(text: str, shift: int) -> str:
"""移位加密,shift 1-25"""
if not 1 <= shift <= 25:
raise ValueError("shift must be 1-25")
result = []
for ch in text:
if ch.isupper():
result.append(chr((ord(ch) - ord('A') + shift) % 26 + ord('A')))
elif ch.islower():
result.append(chr((ord(ch) - ord('a') + shift) % 26 + ord('a')))
else:
result.append(ch) # 非字母原样保留
return ''.join(result)
# 示例
print(caesar_encrypt("Hello, World!", 3)) # 输出: Khoor, Zruog!function caesarEncrypt(text, shift) {
// shift 1-25,非字母字符保留
if (shift < 1 || shift > 25) throw new Error('shift must be 1-25');
return text.replace(/[a-zA-Z]/g, (ch) => {
const base = ch >= 'a' ? 97 : 65;
return String.fromCharCode((ch.charCodeAt(0) - base + shift) % 26 + base);
});
}
console.log(caesarEncrypt('Hello, World!', 3)); // Khoor, Zruog!package main
import (
"fmt"
"unicode"
)
func caesarEncrypt(text string, shift int) (string, error) {
if shift < 1 || shift > 25 {
return "", fmt.Errorf("shift must be 1-25")
}
runes := []rune(text)
for i, r := range runes {
switch {
case 'A' <= r && r <= 'Z':
runes[i] = (r-'A'+rune(shift))%26 + 'A'
case 'a' <= r && r <= 'z':
runes[i] = (r-'a'+rune(shift))%26 + 'a'
}
}
return string(runes), nil
}
func main() {
result, _ := caesarEncrypt("Hello, World!", 3)
fmt.Println(result) // Khoor, Zruog!
}#!/bin/bash
# 使用 tr 实现凯撒移位,仅支持字母,shift=3
caesar_encrypt() {
local text="$1"
local shift=${2:-3}
# 大写字母平移
upper=$(echo "$text" | tr 'A-Z' "$(echo {A..Z} | tr -d ' ' | sed "s/./&/g" | cut -c$((shift+1))-26)$(echo {A..Z} | tr -d ' ' | cut -c1-$shift)")
# 小写字母平移
echo "$upper" | tr 'a-z' "$(echo {a..z} | tr -d ' ' | sed "s/./&/g" | cut -c$((shift+1))-26)$(echo {a..z} | tr -d ' ' | cut -c1-$shift)"
}
caesar_encrypt "Hello, World!" 3 # 输出: Khoor, Zruog!fn caesar_encrypt(text: &str, shift: u8) -> Result<String, &'static str> {
if shift < 1 || shift > 25 {
return Err("shift must be 1-25");
}
let result: String = text.chars().map(|c| {
match c {
'A'..='Z' => ((c as u8 - b'A' + shift) % 26 + b'A') as char,
'a'..='z' => ((c as u8 - b'a' + shift) % 26 + b'a') as char,
_ => c,
}
}).collect();
Ok(result)
}
fn main() {
println!("{}", caesar_encrypt("Hello, World!", 3).unwrap()); // Khoor, Zruog!
}直接把文本粘贴到输入框,勾选“暴力破解所有偏移”选项。工具会一次性输出移位 1 到 25 的所有结果。浏览一遍,如果其中某一行读起来是正常的英文或中文(比如出现常见单词或通顺语句),那一行对应的偏移量就是密钥。如果 25 行全是乱码,说明原文不是凯撒密码,或者用了其他加密方式。
凯撒密码只处理英文字母(A-Z 和 a-z),数字、标点、空格、中文等非字母字符会被原样保留。所以如果你输入了“hello 123”,偏移 3 后只会变成“khoor 123”,数字部分不变。这是算法本身的规则,不是工具 bug。如果想对数字也做位移,需要先转成字母或使用其他加密方式。
工具会按偏移 1-25 依次列出,每行前面标注了“偏移 N:”。正确的那一行通常是唯一能读懂的。对英文原文,你会看到完整的单词和语法结构;对中文拼音,可能出现有意义的词组。如果 25 行看起来都像乱码,可能原文本身就不是标准英文或拼音,或者文本太短(比如只有 1-2 个字母),导致多行都“看起来像词”。建议用至少 5 个单词的段落来测试。
完全在浏览器本地运行。工具实现方式是 FE(前端),所有加密和解密计算都由你电脑的 JavaScript 执行,文本不会离开你的设备。即使断网,页面加载后也能正常使用。所以不用担心隐私泄露,也适合处理敏感信息。
凯撒密码只对英文字母做循环移位。中文字符、日文、韩文等非字母字符会被原样保留。如果你输入的是“你好 world”,偏移 3 后输出会是“你好 zruog”。中文部分不动,只有英文部分变了。如果需要加密中文,建议使用支持 Unicode 的对称加密(如 AES),或者先将中文转成拼音再应用凯撒。
可能原因有两个:一是大小写处理方式不同——本工具严格保留原始大小写(大写变大写,小写变小写);二是非字母字符(如标点、空格)是否参与移位。本工具不处理非字母字符。建议检查你输入的内容是否包含特殊符号,或者对比时注意大小写是否一致。最可靠的办法是拿纯字母的短词(如“abc”)测试偏移 1,看结果是否为“bcd”。
本工具完全在浏览器本地运行,性能取决于你电脑的 CPU。对于几百个字符的短文本,暴力破解 25 种偏移基本瞬间完成。对于几万字符的长文本,可能会有几百毫秒的延迟,但不会卡死浏览器。如果遇到明显卡顿,建议分段处理或使用更专业的桌面工具。现代浏览器对 JavaScript 计算有很好的优化,一般不用担心。
隐私保证所有计算与处理均在你的浏览器本地完成,输入数据不会上传服务器,也不会保存或共享。