虚无党密码加密、解密与密钥破解
虚无党密码先把每个字母换成波利比乌斯方阵里的坐标,再加上循环使用的密钥字母坐标。输入方阵关键词和密钥,就能看到方阵,以及每个密文数字背后的逐字母加法。
密文
37 106 62 36 67 47 86 26 104 53 62 77 27 55 57 66 55 36 54 27
已跳过 2 个非字母字符。J 按 I 处理。
关键词的字母先填入方阵,留空则使用按字母表排列的方阵。
密钥词的字母转成坐标,循环重复后与明文坐标相加。
波利比乌斯方阵
坐标 23 表示第 2 行第 3 列。
- 明文字母
- 密钥字母
- 关键词字母
加法表
明文坐标加上对应的密钥坐标,得到一个密文数字。
本页目录
文章章节
虚无党密码(Nihilist Cipher,也叫虚无主义密码)先用带关键词的波利比乌斯方阵把字母变成数字,再在这些数字上加第二个密钥,得到的密文是一串两位或三位数,比如 58 66 58 87 59。本页的虚无党密码工具会按你的关键词生成方阵,把每一步加法列成可以点选的表格,用密钥解密;即使只有密文和方阵,也能帮你把密钥找出来。
什么是虚无党密码?
| 虚无党密码 | |
|---|---|
| 密钥 | 方阵关键词 + 加法密钥 |
| 明文字母 | 25 个(I 和 J 共用一格) |
| 密文 | 22 到 110 之间的数字,用空格分隔 |
| 所属家族 | 波利比乌斯方阵 + 维吉尼亚式密钥相加 |
| 起源 | 19 世纪 80 年代的俄国革命团体 |
| 今天的安全性 | 弱;两个密钥都不知道也能破解 |
怎么用这个虚无党密码工具
- 选择模式。 "加密"把文字变成数字;"解密"用密钥把数字还原成文字;"找密钥"在丢了加法密钥时把它找回来。
- 输入方阵关键词。 右边的 5×5 方阵会随输入更新:先放关键词里的字母,再按字母表补齐其余字母。留空就是普通字母表顺序。
- 输入密钥。 任何单词都行。密钥字母用同一个方阵换成数字,再沿着消息循环使用。
- 输入消息或粘贴数字。 数字之间用空格、逗号或换行分隔都可以。
- 看表格。 每个字母一行:明文字母和数字、密钥字母和数字,以及两者之和(解密时是差)。点任意一行,方阵里会同时高亮这两个字母。
- 需要时再改选项。 "坐标顺序"可以在"先行后列"和"先列后行"之间切换;"模 100"开关对应下面讲的一种变体。
工具上方的三个示例按钮,分别载入一段加密、一段解密,以及一条用来演示"找密钥"的较长密文。
虚无党密码的加密原理
手工加密分四步。下面用方阵关键词 NIHIL、密钥 FROST 来加密 MEET AT NOON(中午见)。
第一步:生成关键词方阵
把关键词写进 5×5 方格,重复的字母只写一次(NIHIL 变成 N、I、H、L),再按字母表顺序补齐其余字母,跳过 J。行和列都编号 1 到 5。
| 1 | 2 | 3 | 4 | 5 | |
|---|---|---|---|---|---|
| 1 | N | I | H | L | A |
| 2 | B | C | D | E | F |
| 3 | G | K | M | O | P |
| 4 | Q | R | S | T | U |
| 5 | V | W | X | Y | Z |
第二步:把消息换成数字
每个字母写成"行号 + 列号"。M 在第 3 行第 3 列,就是 33。MEETATNOON 变成 33 24 24 44 15 44 11 34 34 11。
第三步:把密钥换成数字并循环
密钥用同一个方阵转换:F = 25,R = 42,O = 34,S = 43,T = 44。循环写到和消息一样长:25 42 34 43 44 25 42 34 43 44。
第四步:上下两行相加
| 字母 | M | E | E | T | A | T | N | O | O | N |
|---|---|---|---|---|---|---|---|---|---|---|
| 明文 | 33 | 24 | 24 | 44 | 15 | 44 | 11 | 34 | 34 | 11 |
| 密钥 | 25 | 42 | 34 | 43 | 44 | 25 | 42 | 34 | 43 | 44 |
| 和 | 58 | 66 | 58 | 87 | 59 | 69 | 53 | 68 | 77 | 55 |
虚无党密码的密文就是 58 66 58 87 59 69 53 68 77 55。注意两个 E 分别变成了 66 和 58,而 M 和第二个 E 这两个不同的字母却都变成了 58。同一个字母不再总是对应同一个数字,这就是它比单纯的波利比乌斯方阵更强的地方。
虚无党密码怎么解密
解密就是做减法。生成同样的方阵,把密钥换成数字并循环,再用每个密文数字减去对应的密钥数字。差必须是方阵里合法的坐标(两位数字都在 1 到 5 之间),再到方阵里查出字母。
| 密文 | 58 | 66 | 58 | 87 | 59 |
|---|---|---|---|---|---|
| 密钥 | 25 | 42 | 34 | 43 | 44 |
| 差 | 33 | 24 | 24 | 44 | 15 |
| 字母 | M | E | E | T | A |
如果某个差不是合法坐标,比如 60 或 17,就说明哪里出错了:密钥、方阵、坐标顺序,或者某个数字抄错了。工具会标出这个数字,其余照常解出,一个笔误不会让整条消息都看不了。
为什么有的数字是三位数
方阵里最大的坐标是 55,55 加上密钥数字 55 等于 110,所以虚无党密码的密文里会出现三位数。多数资料直接照写。也正因为如此,数字之间必须用空格分开:没有空格时,1105 既可能是 110 和 5,也可能是 11 和 05。
也有一些谜题资料采用模 100 变体:去掉百位,110 写成 10,104 写成 04,每个数都正好两位。解密时,减法结果小于 0 就加回 100。只要发信人和收信人用同一种写法,两种都能正确解密。用这种变体时打开"模 100"开关;开关打开后,工具还能把一长串不带空格的数字按两位一组切开。
先行后列,还是先列后行?
多数资料先写行号,所以方阵右上角是 15;也有少数先写列号,同一格就成了 51。如果解出来全是不合法的坐标,先切换坐标顺序,再怀疑密钥。
手工计算时的常见错误
- 忘了 J 就是 I。 方阵只有 25 格,消息和密钥里的 J 都要写成 I。密钥 JADE 实际是 IADE。
- 方阵里写了重复字母。 每个字母只能进方阵一次。把关键词 NIHIL 的两个 I 都写进去,后面所有字母都会错一格。
- 每个单词重新开始用密钥。 密钥沿着消息的字母连续往下走,忽略空格,不会在每个新单词处重来。
- 进位写错。 手算 47 + 45 应该是 92,不是 82。像工具这样把每次加法列成表格,这类笔误很容易发现。
- 把两个密钥用反。 方阵关键词决定字母放在哪一格,加法密钥决定加上什么。两者对调,算出的数字看起来正常,解出来却是乱码。
不知道密钥,怎么破解虚无党密码
虚无党密码会从数字的每一位上泄露密钥。明文坐标和密钥坐标的每一位都在 1 到 5 之间,所以:
- 密文数字的个位,是两个 1 到 5 的数之和,在 2 到 10 之间。个位是 2,说明两个个位都是 1;个位是 0,说明两个都是 5。
- 十位同理,只是可能多一个进位。密文 22 只能来自 11 + 11,110 只能来自 55 + 55。
所以每个密文数字都能排除掉它所在位置上的大部分密钥数字。"找密钥"模式分两步利用这一点:
- 找密钥长度。 对 1 到 20 的每一种可能长度,把数字按密钥位置分成几列;每一列只保留能让这一列所有数字减完后都是合法坐标的密钥数字。长度不对的话,很快就会有某一列一个候选都不剩。
- 选出密钥字母。 长度对的时候,每一列通常只剩一到四个候选。工具把组合都试一遍,按解出的文字像不像英文排序。
举个例子:用 NIHIL 方阵和密钥 FROST 加密 72 个字母的消息 MEET AT NOON BY THE NORTH GATE AND BRING THE MAP OF THE OLD MINE SHAFT WE FOUND LAST WINTER,得到 72 个数字。工具里,1 到 20 的密钥长度中只有 5 和它的倍数 10、15、20 没被排除。长度为 5 时,五个位置分别剩下 E 或 F、R、E 或 O、M 或 S、O 或 T。在这 16 种可能的密钥里,只有 FROST 能解出通顺的英文,整条消息随之解开。
短消息难得多。MEET AT NOON 只有 10 个数字,每个密钥位置只有两个数字可以检验,第一个位置仍有 8 个可能的密钥数字。一般来说,消息越长,结果越确定。这种方法需要知道方阵;如果方阵也不知道,密钥照样能用同样的办法暴露出来,但坐标背后对应哪个字母,要像破解简单替换密码那样再推一遍。
怎么认出虚无党密码
- 数字在 22 到 110 之间,大多两位,偶尔三位。
- 没有一个数字以 1 结尾,因为个位相加至少是 2。如果一串数字里有 31、41 这样的数,就不是标准的虚无党密码。
- 数字之间用空格隔开。
- 和普通的波利比乌斯密码相比,数字更大,而且会出现 6 到 9 和 0 这些方阵坐标里不可能出现的数字。
虚无党密码的历史
这种密码得名于俄国虚无党人——19 世纪 70、80 年代反对沙皇政府的革命团体,他们用它给通信保密。把波利比乌斯方阵和数字密钥结合起来,用纸笔就能完成,却比单独用任何一种方法都难读得多。
"先把字母变成数字,再加上数字密钥"的思路,后来又出现在苏联的手工密码里。最有名的是 20 世纪 50 年代的 VIC 密码,它先用跨格棋盘把字母变成数字,再加上数字密钥。想了解波利比乌斯方阵怎样演变出这一系列密码,可以阅读波利比乌斯方阵的后代:虚无党、Bifid 与 ADFGX。
虚无党密码和相关密码的比较
可以把虚无党密码看成在波利比乌斯数字上做的维吉尼亚加密。它继承了维吉尼亚密码"短密钥循环使用"的弱点,又多了一个自己的弱点:方阵坐标的数字范围有限,会告诉攻击者哪些密钥数字是可能的。
虚无党密码常见问题
不知道密钥,能解开虚无党密码吗?
如果知道方阵关键词、密文又够长,通常可以。选择"找密钥":工具会测试 1 到 20 的每种密钥长度,只保留能让所有密文数字都减成合法方阵坐标的密钥数字,再按解出的文字像不像英文给剩下的密钥排序。50 个数字以上的密文,结果通常很明确。
密文里为什么会有 110 这样的三位数?
方阵坐标最大是 55,加上密钥数字最多可以到 110,所以标准的虚无党密码里出现三位数是正常的。有些资料会去掉百位,遇到这种写法时打开"模 100 变体"开关。
解密时提示坐标不合法,怎么办?
按顺序检查:方阵关键词、密钥、坐标顺序(先行后列还是先列后行)、模 100 设置。如果只有一两个数字不合法,多半是这几个数字抄错了,工具会标出它们的位置。
虚无党密码和波利比乌斯方阵有什么区别?
波利比乌斯方阵每次都把同一个字母变成同一个两位坐标。虚无党密码在坐标上再加一个循环密钥,同一个字母在不同位置会得到不同的数字,数字范围也从 11–55 变成 22–110。
方阵里为什么把 I 和 J 合在一起?
5×5 方阵只有 25 格,英文字母有 26 个,必须有两个字母共用一格。通常选 I 和 J,因为 J 很少用,历史上也曾是 I 的变体。消息和密钥里的 J 都写成 I。
怎么判断一串数字是不是虚无党密码?
看三点:数字在 22 到 110 之间、用空格分隔、没有一个数以 1 结尾。普通的波利比乌斯密码只会出现 1 到 5 这几个数字,虚无党密码还会出现 6 到 9 和 0。