替换密码:加密、解密与生成密钥

用一张 26 个字母的对照表,把每个字母换成另一个字母。可以随机打乱密钥、由关键词生成密钥,或填入谜题给出的密钥,加密和解密时空格和标点都留在原处。

密钥

26 个字母各出现一次,密钥已生效。

密钥(A 到 Z 对应的密文字母)
QWERTYUIOPASDFGHJKLZXCVBNM

密文

Zit zktqlxkt ol xfrtk zit ziokr lzgft.

带着这段密文打开破解器,不使用密钥。

字母对照表

加密密钥

↑ 明文↓ 密文

AQ
BW
CE
DR
ET
FY
GU
HI
IO
JP
KA
LS
MD
NF
OG
PH
QJ
RK
SL
TZ
UX
VC
WV
XB
YN
ZM

解密密钥

↑ 密文↓ 明文

AK
BX
CV
DM
EC
FN
GO
HP
IH
JQ
KR
LS
MZ
NY
OI
PJ
QA
RD
SL
TE
UG
VW
WB
XU
YF
ZT

没有字母映射到自己。 高亮的列是你的文字用到的字母。

没有密钥时破解替换密码

替换密码(Substitution Cipher,也叫代换密码)把消息里的每个字母换成另一个字母,整条消息只用同一张对照表。这个工具可以用任意一张对照表加密和解密:随机打乱的、由关键词生成的,或者你一个字母一个字母填进去的。它会把对照表显示成上下两行字母,原文里的空格和标点留在原处,同时给出加密用的密钥和解密用的密钥。

替换密码是什么

替换密码的密钥,就是写在正常字母表下面的一行打乱的字母。加密时,每个明文字母换成它正下方的那个字母:

明文:  A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
密文:  Q W E R T Y U I O P A S D F G H J K L Z X C V B N M

这一行其实就是键盘字母从左到右、从上排到下排读下来的顺序,所以英文谜题书里把它叫作 QWERTY 密码或键盘密码。字母表一共有 26! 种排法,任何一种都可以这样用。

它只有两条规则:

  • 一个字母只对应一个字母。 E 每次出现都变成 T,不会变成别的。整条消息只用一张密文字母表,所以它也叫单表替换密码(monoalphabetic substitution)。
  • 字母的顺序不变。 单词长度、空格、标点、连续两个相同的字母,加密后都原样保留。

英文资料里它有好几个名字:simple substitution cipher、monoalphabetic substitution cipher、replacement cipher;报纸和谜题书上的 cryptogram(字母密码谜题)也是它。

替换密码工具怎么用

  1. 选择加密或解密。 加密把输入当明文、输出密文;解密用同一把密钥反过来算,不需要自己去推倒查表。
  2. 生成密钥。 在密钥面板里选“随机”“用关键词”或“手动输入 26 个字母”。面板下方的两行对照表会立即更新,原文里用到的字母会高亮,一眼就能看出这条消息实际用到了密钥的哪几列。
  3. 输入或粘贴文字。 结果随输入实时更新。大写保持大写,小写保持小写,不是字母的字符原样照抄。
  4. 复制需要的内容。 可以复制结果、26 字母的加密密钥或解密密钥。真要保密的话,密文和密钥最好分开发送。
  5. 交给破解器试试。 点“试着破解”,会打开替换密码破解器并自动填好这段密文。用它可以直观地看到:一段替换密码要多长,才会暴露自己。

加密:逐个字母替换

用上面的 QWERTY 密钥加密英文句子 The treasure is under the third stone.(宝藏在第三块石头下面)。这句话里只出现了 11 个不同的字母,所以只用到密钥里的 11 列:

明文ADEHINORSTU
密文QRTIOFGKLZX

逐个替换字母,其他字符不动:

The treasure is under the third stone.
Zit zktqlxkt ol xfrtk zit ziokr lzgft.

注意加密后留下了什么:The 出现两次,两次都变成 Zit;句号还在句末;每个单词的长度都没变。破译者靠的正是这些痕迹,所以消息只要稍长一点,这种密码就很容易被破开。

解密:把密钥倒过来查

解密时,在下面那一行里找到密文字母,写下它上面的明文字母。把 26 个字母都这样倒查一遍,就得到第二张表,也就是解密密钥。QWERTY 密钥对应的解密密钥是:

密文:  A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
明文:  K X V M C N O P H Q R S Z Y I J A D L E G W B U F T

密文 A 来自明文 K,密文 B 来自明文 X,依此类推。工具会把这张倒查表和加密密钥并排显示。两张表描述的是同一个密码,给对方哪一张都可以,看对方用哪张方便。

工具里生成密钥的三种方式

随机密钥。 点一下就把字母表打乱。如果勾选“不允许字母映射到自己”,生成的密钥里 A 不会还是 A、B 不会还是 B。英文谜题书的 cryptogram 和 Science Olympiad 的 Codebusters 比赛都遵守这条规则,求解时也能把它当线索用。做练习题时建议打开。

用关键词。 输入一个单词或短语,工具去掉重复字母,把剩下的字母放在字母表最前面,后面按顺序接上没用到的字母。这张混合字母表和正常字母表怎么对齐,Codebusters 有三种标准排法,叫 K1、K2、K3,工具三种都能生成。三者的区别和例子见 Aristocrat 密码练习页。用这种方式生成的密钥,就是关键词密码。

手动输入 26 个字母。 题目或书里直接给了密钥时用这个。漏了字母或者有字母重复,工具会马上提示,因为这两种错误都会让某些字母没法解密。

不论用哪种方式,密钥最后都显示成一串 26 个字母,可以复制保存,以后再粘贴回来用。

一共有多少种密钥

字母表的打乱方法共有 26 × 25 × 24 × … × 1 种:

26! = 403,291,461,126,605,635,584,000,000

约 4 × 10²⁶。

如果不允许字母映射到自己,大约剩 1.48 × 10²⁶ 种,约占全部的 37%。换句话说,随机打乱一次,有约 63% 的概率至少有一个字母留在原位。

逐个试密钥是不可能的,但这并不代表它安全。没有人靠穷举密钥来破替换密码,而是读上面说的那些痕迹。E 是英语里最常见的字母,所以密文里最常见的字母很可能就是 E;反复出现的三字母单词很可能是 THE;形如 ABCCD 的五字母单词(比如 Zkqqt)中间有两个相同字母,范围就缩小到 LOOKS、SEEMS 这类词。每猜对一个,就填上密钥里的几列,下一个就更好猜。

替换密码破解器会自动做这件事,并显示它找到的密钥。上面那个只有 31 个字母的例子 Zit zktqlxkt ol xfrtk zit ziokr lzgft.,它也能解出来,前提是打开它的“字母不解成自己”选项(QWERTY 密钥恰好符合这条规则)。关掉这个选项,字母太少、能对上的密钥太多,它就会停在 Was weshopes to purse was water ownus. 这样的胡话上。短消息之所以暂时安全,只是因为能对上的密钥太多;多一条线索,这层保护就没了。

自己出一道替换密码谜题

替换密码很适合做谜题:解题的人手上什么都有,唯独缺密钥。英文报纸上的 cryptogram 栏目靠这一点办了一百多年。题目好不好玩,取决于下面几个选择:

  • 长度。 80 到 150 个字母比较合适。少于 50 个字母,统计规律太少,几乎没有抓手;超过 200 个字母,又会变得机械。
  • 选什么文字。 一句名言或书里的一句话最好,解到一半时会有“原来是这句”的乐趣。人名清单、拼成单词的数字、生僻词会把解题要靠的规律藏起来,尽量避开。
  • 密钥。 随机生成,并打开“不允许字母映射到自己”。解题的人默认这条规则,留在原位的字母一旦被发现,就成了白送的线索。
  • 空格。 保留空格就是普通的 cryptogram。去掉空格、按五个字母一组书写,难度会大很多,Codebusters 把这种题叫 Patristocrat。
  • 提示。 给新手出题时,可以透露一个单词或两个字母,比如“ZIT = THE”。它替对方解决了最难的第一步。

发出去之前,先把题目粘贴进替换密码破解器试一下。如果破解器要试好几次,或者解出了错误答案,人来解也会很吃力,这时可以换一段更长的文字,或者加一个提示。

使用替换密码的常见错误

手动输入的密钥里有重复字母。 两个明文字母共用一个密文字母,解密时就分不清了:Q 到底是 A 还是 K?所以密钥框要求 26 个字母各出现一次,否则不接受。

拿加密密钥去解密。 从错的那一行查表,得到的不是明文,而是又一层乱码。解密时把工具切换到“解密”、密钥保持不变,就不会出这种错。

以为密钥越长越安全。 不论密钥来自七个字母的关键词,还是完全随机打乱,替换密码都用同一种方法破:字母频率加单词形状。随机密钥只在一点上更好:破出一部分后,没法顺着猜出关键词,把剩下的补全。

人名和数字没有处理。 数字不会被加密,消息开头的大写单词往往是人名。给朋友传个小纸条无所谓;做谜题时,它们可能泄露比你想的多得多的信息。

小说里的替换密码

两篇经典侦探小说的关键情节,都是破解一段替换密码,用的也正是上面说的方法。

爱伦·坡的《金甲虫》(The Gold-Bug,1843)里,威廉·勒格朗发现一张写满数字和印刷符号的羊皮纸。他推断写信人用的是英语,统计每个符号的次数,发现数字 8 出现得最多,应该代表 E;符号组 ;48 反复出现,应该是 THE。他从这里出发,一个个推出其余字母,读出了通往宝藏的指引。

柯南·道尔的《跳舞的人》(The Adventure of the Dancing Men,1903)里,密文是一排小人,举着旗子的小人表示一个单词结束。福尔摩斯同样先把出现最多的小人当作 E,再借助反复出现的短词和他预料会出现的名字往下推。故事结尾,他用跳舞的小人写下 COME HERE AT ONCE(马上过来),把写恐吓信的人引到了庄园。

两个故事里的密文都是符号而不是字母,但本质上都是简单替换密码:每个字母固定换成一个符号。站上的猪圈密码也是同一类替换密码,每个字母对应一个几何符号。

替换密码家族

站上很多密码,其实都是“密钥范围受限”的替换密码。它们的每一把密钥都是 26! 种打乱字母表中的一种,所以通用的替换密码破解器能把它们全部破开。

密码允许的字母表密钥数量
凯撒密码正常字母表整体平移25
Atbash 密码字母表倒过来,A↔Z、B↔Y1
仿射密码由公式 ax + b mod 26 算出的字母表312
关键词密码以关键词开头的字母表每个关键词一种
简单替换密码26 个字母的任意排列26!

另一些密码是故意打破“一个字母只对应一个字母”这条规则的。维吉尼亚密码轮流使用好几张字母表,同一个明文字母会变成不同的密文字母;同音替换密码给常见字母准备好几个替身,把字母频率摊平;Playfair 密码一次替换两个字母。这些改动正是为了让简单的频率统计失效,所以它们各自需要专门的破解方法。

简史

一千多年里,替换密码一直是保密通信的常规手段,它的弱点也很早就有人写了下来。公元九世纪,阿拉伯学者肯迪(al-Kindi)记录了用统计字母次数来破解它的方法,也就是今天说的频率分析。到了十六世纪,欧洲宫廷普遍使用“nomenclator”:一张替换字母表,再加上一批代表常用词和人名的符号。1586 年,苏格兰女王玛丽用这种密码和巴宾顿密谋者通信;为伊丽莎白一世的国务大臣沃尔辛厄姆工作的托马斯·菲利普斯破解了它,解出的信件成了审判玛丽的证据。

今天,简单替换密码主要以谜题的形式存在:报纸上的 cryptogram、密室逃脱、Codebusters 比赛都在用它,正因为它只靠耐心和一支铅笔就能解开。

替换密码常见问题

Cryptogram 和替换密码是一回事吗?

通常是。英文报纸和谜题书上的 cryptogram,就是把一句名言用简单替换密码加密:每个字母全文固定换成另一个字母,空格和标点保留。有的谜题书用数字或符号代替字母,规则不变。

字母可以替换成它自己吗?

普通的替换密码可以,因为字母表的任何排列都是合法密钥。英文 cryptogram 谜题和 Science Olympiad 的 Codebusters 比赛不允许这样,每个字母都必须变。随机生成密钥时勾选“不允许字母映射到自己”,就符合这条规则。

加密密钥和解密密钥有什么区别?

加密密钥说明每个明文字母变成什么;解密密钥是同一张表从另一边读:每个密文字母原来是什么。以 QWERTY 密钥为例,明文 A 变成 Q,所以在解密密钥里,Q 指回 A。工具两张都会显示,任何一张都足以描述这个替换密码。

怎么把密钥发给别人?

复制密钥面板下方那串 26 个字母。对方把它粘贴到“手动输入 26 个字母”里,就得到完全相同的密码。如果密钥是用关键词生成的,只发关键词和字母表类型(K1、K2 或 K3)也够了。

为什么空格和标点不加密?

替换密码只替换字母,所以工具把其他字符都留在原处,大小写也保持不变,得到的密文就是经典 cryptogram 的样子。如果连单词长度也想藏起来,加密前先删掉空格;Codebusters 的 Patristocrat 题就是这样做的,并把字母按五个一组排列。

关键词密码算替换密码吗?

算。关键词密码就是密文字母表以关键词开头的替换密码。它好记,但破解出密钥后,关键词通常能直接从密钥里读出来,破解器的“关键词反推”做的就是这件事。

相似工具