虚无党密码加密、解密与密钥破解

虚无党密码先把每个字母换成波利比乌斯方阵里的坐标,再加上循环使用的密钥字母坐标。输入方阵关键词和密钥,就能看到方阵,以及每个密文数字背后的逐字母加法。

快速示例

密文

37 106 62 36 67 47 86 26 104 53 62 77 27 55 57 66 55 36 54 27

已跳过 2 个非字母字符。J 按 I 处理。

关键词的字母先填入方阵,留空则使用按字母表排列的方阵。

密钥词的字母转成坐标,循环重复后与明文坐标相加。

波利比乌斯方阵

12345
1ZEBRA
2SCDFG
3HI/JKLM
4NOPQT
5UVWXY

坐标 23 表示第 2 行第 3 列。

  • 明文字母
  • 密钥字母
  • 关键词字母

加法表

明文坐标加上对应的密钥坐标,得到一个密文数字。

虚无党密码(Nihilist Cipher,也叫虚无主义密码)先用带关键词的波利比乌斯方阵把字母变成数字,再在这些数字上加第二个密钥,得到的密文是一串两位或三位数,比如 58 66 58 87 59。本页的虚无党密码工具会按你的关键词生成方阵,把每一步加法列成可以点选的表格,用密钥解密;即使只有密文和方阵,也能帮你把密钥找出来。

什么是虚无党密码?

虚无党密码把两种更早的方法叠在一起:波利比乌斯方阵把每个字母变成两位坐标,再像维吉尼亚密码那样,把一个循环使用的密钥加上去。结果是一种用数字书写的多表替换密码。

虚无党密码
密钥方阵关键词 + 加法密钥
明文字母25 个(I 和 J 共用一格)
密文22 到 110 之间的数字,用空格分隔
所属家族波利比乌斯方阵 + 维吉尼亚式密钥相加
起源19 世纪 80 年代的俄国革命团体
今天的安全性弱;两个密钥都不知道也能破解

怎么用这个虚无党密码工具

  1. 选择模式。 "加密"把文字变成数字;"解密"用密钥把数字还原成文字;"找密钥"在丢了加法密钥时把它找回来。
  2. 输入方阵关键词。 右边的 5×5 方阵会随输入更新:先放关键词里的字母,再按字母表补齐其余字母。留空就是普通字母表顺序。
  3. 输入密钥。 任何单词都行。密钥字母用同一个方阵换成数字,再沿着消息循环使用。
  4. 输入消息或粘贴数字。 数字之间用空格、逗号或换行分隔都可以。
  5. 看表格。 每个字母一行:明文字母和数字、密钥字母和数字,以及两者之和(解密时是差)。点任意一行,方阵里会同时高亮这两个字母。
  6. 需要时再改选项。 "坐标顺序"可以在"先行后列"和"先列后行"之间切换;"模 100"开关对应下面讲的一种变体。

工具上方的三个示例按钮,分别载入一段加密、一段解密,以及一条用来演示"找密钥"的较长密文。

虚无党密码的加密原理

手工加密分四步。下面用方阵关键词 NIHIL、密钥 FROST 来加密 MEET AT NOON(中午见)。

第一步:生成关键词方阵

把关键词写进 5×5 方格,重复的字母只写一次(NIHIL 变成 N、I、H、L),再按字母表顺序补齐其余字母,跳过 J。行和列都编号 1 到 5。

12345
1NIHLA
2BCDEF
3GKMOP
4QRSTU
5VWXYZ

第二步:把消息换成数字

每个字母写成"行号 + 列号"。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。

第四步:上下两行相加

字母MEETATNOON
明文33242444154411343411
密钥25423443442542344344
和58665887596953687755

虚无党密码的密文就是 58 66 58 87 59 69 53 68 77 55。注意两个 E 分别变成了 66 和 58,而 M 和第二个 E 这两个不同的字母却都变成了 58。同一个字母不再总是对应同一个数字,这就是它比单纯的波利比乌斯方阵更强的地方。

虚无党密码怎么解密

解密就是做减法。生成同样的方阵,把密钥换成数字并循环,再用每个密文数字减去对应的密钥数字。差必须是方阵里合法的坐标(两位数字都在 1 到 5 之间),再到方阵里查出字母。

密文5866588759
密钥2542344344
差3324244415
字母MEETA

如果某个差不是合法坐标,比如 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. 找密钥长度。 对 1 到 20 的每一种可能长度,把数字按密钥位置分成几列;每一列只保留能让这一列所有数字减完后都是合法坐标的密钥数字。长度不对的话,很快就会有某一列一个候选都不剩。
  2. 选出密钥字母。 长度对的时候,每一列通常只剩一到四个候选。工具把组合都试一遍,按解出的文字像不像英文排序。

举个例子:用 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 世纪 80 年代圣彼得堡阁楼里,油灯下的桌上放着手绘的 5×5 方格和写满两位数密文的纸条
虚无党密码的想象图:铅笔画的 5×5 波利比乌斯方阵,旁边纸条上是算出来的密文数字。

这种密码得名于俄国虚无党人——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。

相似工具