编码加密 · 古典密码

Vigenere 密码

多表替换/已知明文破解

本地处理 · 不上传 免费 · 无需登录 无次数限制 累计 104 次使用

维吉尼亚密码 multi-table substitution

密钥
明文plaintext
密文ciphertext
示例

密钥流对照 keystream alignment

明文 P 密钥流 K(循环铺展) 密文 C = (P + K) mod 26

已知明文反推密钥 known-plaintext recovery

原理K = (C − P) mod 26,由对齐的明文/密文片段还原密钥位
已知明文片段known plaintext
对应密文片段matching ciphertext

维吉尼亚方阵 tabula recta

展开 26×26 方阵(行=密钥字母 · 列=明文字母 · 交点=密文)
第一节

关于本工具

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. 1在「密钥」输入框键入字母单词(如 KEY),密钥长度自动检测,下方提示区显示当前密钥循环位置
  2. 2在「明文」或「密文」输入框键入待处理文本,另一侧输入框实时同步显示加密或解密结果,无需点击按钮
  3. 3勾选「已知明文破解」复选框,在弹出区域输入已知明文字段,系统自动反推密钥并高亮匹配位置
  4. 4点击「大小写保留」开关切换字母大小写处理模式,开关状态右侧实时显示当前模式说明(如「保留原大小写」)
  5. 5点击「复制结果」按钮将输出框内容写入剪贴板,按钮短暂变为「已复制」状态后恢复

输入输出示例

输入输出说明
明文:HELLO,密钥:KEYRIJVS常规:全大写字母,密钥循环使用,验证基本加密流程
明文:hello,密钥:keyrijvs常规:小写字母,输出保持小写,验证大小写敏感处理
明文:Hello, World!,密钥:KEYRijvs, Ahyzc!边界:非字母字符(逗号、空格、感叹号)原样保留,不参与替换
明文:A,密钥:ZZ边界:单字符明文,密钥字母 Z 使 A 回绕到 Z,验证模 26 运算
明文:HELLO,密钥:HELLO边界:空密钥时输出等于输入,验证工具对空密钥的处理
明文:HELLO,密钥:KEYKEYKRIJVS易错:密钥长度大于明文时,只使用前 N 个字符,结果与常规 case 相同,避免误解为密钥需完整循环
明文:12345,密钥:KEY12345易错:纯数字输入不包含字母,输出与输入完全相同,用户可能误以为工具失效

常见错误对照

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 库)来解密,只要密钥匹配结果就相同。

隐私保证所有计算与处理均在你的浏览器本地完成,输入数据不会上传服务器,也不会保存或共享。

选择 打开 +新窗口 esc关闭