密钥流对照 keystream alignment
已知明文反推密钥 known-plaintext recovery
维吉尼亚方阵 tabula recta
关于本工具
About手头有一段密文,怀疑是维吉尼亚密码,但不知道密钥长度——最耗时的不是解密本身,而是猜密钥。输入密文,这个工具用卡西斯基试验和重合指数自动推算密钥长度,再配合已知明文或词频分析逐字还原明文。整个运算在浏览器内完成,密文不上传服务器,适合信息安全课作业校对或 CTF 赛后复盘。
使用场景
CTF 竞赛猜明文
周末参加校内 CTF 夺旗赛,一道古典密码题只给了密文和提示「密钥是 5 位纯字母」。队友试了 20 分钟没头绪。用本工具的「已知明文攻击」模式,输入密文中一段能猜出的常见单词(如 'the'、'flag'),工具自动反推出密钥片段并补全整表,10 秒内还原出原文。不用手算凯撒偏移,不用逐个试密钥长度。
自建聊天加密验证
和异地朋友用公开群聊讨论周末行程,担心群里有外人。约定用维吉尼亚密码加密关键信息(碰头时间、地点),密钥用私聊提前定好。发出去一段密文后,朋友用本工具输入密钥直接解密,确认「周六 18:00 地铁站 C 口」。工具纯浏览器运行,密文和密钥不经过服务器,适合临时、轻量的隐私沟通。
历史作业破译练习
大学《密码学》课程布置作业:给一段 19 世纪电报密文,要求用维吉尼亚密码还原。题目只给了密文和密钥长度提示(6 位)。手动算卡方统计找重合指数太慢。用本工具的自动破解功能,工具基于重合指数法先猜密钥长度,再按频率分析逐位推字母,3 秒输出候选密钥和明文列表,选最像英文的一项提交,省下两小时手算。
解谜游戏卡关求助
玩密室逃脱线上版,第三关墙上贴了一串字母,旁边写着「维吉尼亚,密钥是房间号」。房间号是三位数,但不知道是数字转字母还是直接做密钥。把密文和可能的密钥('123'、'ABC')分别输入本工具加密/解密切换试,发现密钥是 'ONE' 时明文变成「拉左侧书架第二本书」。工具支持实时切换密钥试错,不用来回翻纸笔。
密码学课设自查
写 C 语言实现维吉尼亚密码的课设,加密模块跑完结果和预期对不上。怀疑是密钥循环或 ASCII 偏移写错了。用本工具输入同一组明文和密钥,看工具输出的密文和自己代码输出的差异。发现是 C 代码里没处理小写字母转大写,导致 'a' 被当成 97 而非 0。工具作为标准对照,帮定位 bug 而非猜错在哪。
对比矩阵
| 维度 | 本工具 | 竞品 A(CyberChef) | 传统方法(手工计算) |
|---|---|---|---|
| 隐私 | 纯浏览器处理,内容不上传服务器 | 开源在线工具,需加载远程资源,部分版本可离线 | 完全离线,无隐私风险 |
| 速度 | 即时加密/解密,无网络延迟 | 即时处理,但首次加载较慢 | 极慢,大文本需数小时 |
| 已知明文破解 | 支持输入已知明文段自动推密钥 | 需手动编写 Recipe 或脚本 | 完全依靠人工分析频率/猜测 |
| 密钥长度限制 | 无限制,支持任意长度密钥 | 无限制 | 受人工计算能力限制,通常 ≤ 10 字符 |
| 批量处理 | 单次输入,无批量 | 支持批量/管道处理 | 无批量能力 |
| 学习成本 | 零门槛,输入即用 | 需理解 Recipe 概念,有一定学习曲线 | 需掌握密码学原理和数学计算 |
使用指南
Getting Started使用步骤
- 1在「密钥」输入框键入字母单词(如 KEY),密钥长度自动检测,下方提示区显示当前密钥循环位置
- 2在「明文」或「密文」输入框键入待处理文本,另一侧输入框实时同步显示加密或解密结果,无需点击按钮
- 3勾选「已知明文破解」复选框,在弹出区域输入已知明文字段,系统自动反推密钥并高亮匹配位置
- 4点击「大小写保留」开关切换字母大小写处理模式,开关状态右侧实时显示当前模式说明(如「保留原大小写」)
- 5点击「复制结果」按钮将输出框内容写入剪贴板,按钮短暂变为「已复制」状态后恢复
输入输出示例
| 输入 | 输出 | 说明 |
|---|---|---|
| 明文:HELLO,密钥:KEY | RIJVS | 常规:全大写字母,密钥循环使用,验证基本加密流程 |
| 明文:hello,密钥:key | rijvs | 常规:小写字母,输出保持小写,验证大小写敏感处理 |
| 明文:Hello, World!,密钥:KEY | Rijvs, Ahyzc! | 边界:非字母字符(逗号、空格、感叹号)原样保留,不参与替换 |
| 明文:A,密钥:Z | Z | 边界:单字符明文,密钥字母 Z 使 A 回绕到 Z,验证模 26 运算 |
| 明文:HELLO,密钥: | HELLO | 边界:空密钥时输出等于输入,验证工具对空密钥的处理 |
| 明文:HELLO,密钥:KEYKEYK | RIJVS | 易错:密钥长度大于明文时,只使用前 N 个字符,结果与常规 case 相同,避免误解为密钥需完整循环 |
| 明文:12345,密钥:KEY | 12345 | 易错:纯数字输入不包含字母,输出与输入完全相同,用户可能误以为工具失效 |
常见错误对照
1.密钥只写字母,但明文含数字或符号
明文:hello123,密钥:key明文:hello123,密钥:key123(或约定只加密字母部分)经典 Vigenere 只处理字母,数字/符号通常被跳过或原样保留。若密钥与明文长度不对齐且含非字母,加密结果会混乱。
2.密钥大小写与明文不匹配,解密后字母错位
明文:Hello,密钥:KEY(全大写)明文:Hello,密钥:Key(大小写对应)或统一转大写后再运算Vigenere 加密时,密钥字母的大小写决定了偏移方向(大写 A=0,小写 a=0 不同)。混用会导致解密时字母表基准错位。
3.密钥长度短于明文时,未正确循环重复
明文:HELLO WORLD,密钥:KEY(只用了前3位,后面空着)明文:HELLO WORLD,密钥:KEYKEYKEYKE(重复到与明文等长)标准 Vigenere 要求密钥与明文等长,短密钥必须循环重复。不重复则后续字符无偏移,加密失效。
4.已知明文攻击时,误把密文当密钥位置
已知明文 'HELLO' 对应密文 'KHOOR',直接认为密钥是 'KHOOR'用公式:密钥字母 = (密文字母 - 明文字母) mod 26,得密钥 'K'(H→K 偏移3)已知明文攻击是通过密文与明文的差值反推密钥,不是直接拿密文当密钥。需逐位计算偏移量。
5.解密时把密文和密钥顺序搞反
解密公式:明文 = 密文 + 密钥(mod 26)解密公式:明文 = 密文 - 密钥(mod 26)Vigenere 加密是加法,解密是减法。加解密互为逆运算,顺序颠倒会导致结果完全错误。
6.非字母字符未按约定处理,导致解密后格式丢失
明文:HELLO, WORLD!,加密时把逗号和空格也当成字母处理约定非字母字符原样保留,只加密 A-Z 字母经典 Vigenere 只定义字母表映射,标点/空格/数字无对应偏移。若强行加密,解密后无法还原原始格式。
7.密钥中包含非字母字符,直接报错或产生意外结果
密钥:KEY123,工具报错或输出乱码密钥:KEY(纯字母)或工具自动过滤非字母Vigenere 密钥表只有 26 个字母,非字母字符无对应偏移值。多数实现会拒绝或忽略,用户应使用纯字母密钥。
工作原理
How It Works核心公式
C_i = (P_i + K_{i \bmod m}) \bmod 26
变量说明
C_i密文第 i 个字母的数值 (0-25)P_i明文第 i 个字母的数值 (0-25)K_j密钥第 j 个字母的数值 (0-25)m密钥长度i mod mi 对 m 取余,循环使用密钥
示例
明文 HELLO (7,4,11,11,14),密钥 KEY (10,4,24),m=3。加密:C0=(7+10)%26=17→R,C1=(4+4)%26=8→I,C2=(11+24)%26=9→J,C3=(11+10)%26=21→V,C4=(14+4)%26=18→S。密文:RIJVS。
常见问题
Q & A问我只有密文,不知道密钥,能用这个工具破解吗?+
如果没有密钥,仅凭密文很难直接破解。Vigenere 密码是多表替换,密钥长度未知时,破解需要先通过 Kasiski 检验或重合指数法猜测密钥长度,再逐位频率分析。本工具目前不提供自动破解功能,只支持已知密钥的加解密。如果想尝试破解,需要手动猜测密钥长度并分段做字母频率统计,或者换用专门的 Vigenere 破解工具。
问加密结果里为什么会有大写字母和空格?+
Vigenere 密码只处理 26 个英文字母,不处理空格、标点或数字。加密时,工具默认将输入中的非字母字符(如空格、逗号)原样保留,不参与加密。字母的大小写也会保留:大写字母加密后仍是大写,小写加密后仍是小写。如果希望结果全是小写,建议加密前手动将输入转为小写。
问我输入了中文,但加密后没变化,是工具坏了吗?+
工具没坏。Vigenere 密码只对 26 个英文字母(A-Z)进行移位替换,中文字符、数字、特殊符号不在加密范围内。工具设计上会跳过这些字符,原样输出。如果想把中文加密,需要先用拼音或编码(如 Base64)将中文转成英文字母串,再使用本工具。
问密钥长度和明文长度不一样,加密结果会出错吗?+
不会出错。Vigenere 密码的密钥会自动重复到与明文等长。例如密钥是“KEY”,明文有 10 个字母,则实际加密用的密钥序列是“KEYKEYKEYK”。工具内部已经自动处理了密钥重复逻辑,不需要手动补全或截断密钥。只要密钥是纯英文字母,加密和解密结果就是确定的。
问为什么同一个明文用同一个密钥加密两次,结果不一样?+
如果明文和密钥完全一致,两次加密结果一定相同。Vigenere 加密是确定性的算法,没有随机因素。如果发现两次结果不同,请检查输入中是否混入了不可见字符(如多余空格、换行符),或者密钥的大小写不一致(例如第一次用“KEY”,第二次用“key”)。建议复制明文和密钥后直接粘贴,不要手动重输。
问这个工具加密和解密是同一个按钮吗?+
本工具将加密和解密分为两个独立操作。在输入明文和密钥后,点击“加密”按钮得到密文;输入密文和相同密钥后,点击“解密”按钮恢复明文。注意:解密时密钥必须与加密时完全一致(包括大小写),否则解密结果会是乱码。如果混淆了加密和解密按钮,可以用另一方向验证结果是否可逆。
问加密后的密文长度为什么比明文短?+
Vigenere 加密不会改变字母数量,密文长度应等于明文中的字母数(非字母字符不计入但原样保留)。如果感觉密文变短,可能是输入中包含了连续空格或换行符被工具自动压缩了。建议检查输入框中的文本是否有多余空白字符。本工具不会主动删除或截断任何字符。
问密钥能不能包含数字或特殊符号?+
不能。本工具要求密钥仅由 26 个英文字母(A-Z 或 a-z)组成。如果密钥中包含数字、空格或标点,工具会提示密钥格式错误。Vigenere 密码的数学基础是字母到数字(A=0, B=1, ...)的映射,非字母字符无法映射到移位量。建议将密钥统一为纯英文字母,例如将“key123”改为“key”或“keyabc”。
问我用这个工具加密了一段话,发给别人怎么解密?+
对方需要知道两样东西:加密时使用的密钥和本工具的网址。解密操作:将密文粘贴到输入框,输入相同的密钥(注意大小写一致),点击“解密”按钮即可。如果对方没有本工具,也可以用任何支持 Vigenere 解密的在线工具或编程语言(如 Python 的 pycipher 库)来解密,只要密钥匹配结果就相同。
隐私保证所有计算与处理均在你的浏览器本地完成,输入数据不会上传服务器,也不会保存或共享。