替换式密码

替换式密码，又名取代加密法，是密码学中按规律将文字加密的一种方式。替换式密码中可以用不同字母数为一单元，例如每一个或两个字母为一单元，然后再作加密。密文接收者解密时需用原加密方式解码才可取得原文本。由于拼音文字中字的组成为有限的字母，以英语为例只有26个字母，组成可能的单元数较少，因此使用替换式密码相对较为容易，而且亦可使用简单机械进行加密；相反，非拼音文字如中文则因单元数非常大难以使用一般加密方式，必需建立密码本，然后逐字替换。更何况某些非拼音文字中字字皆由不同大小的字根来组字，较难转换，因此使用替换式密码的示例比较少。
但对比还是很难。
当以替换式密码与置换式密码（或称转位式密码或移转式密码1-15）相比较时，可以发现转位式密码只是改变明文中单元的位置，而单元本身没有转变；相反，替换式密码只是转换单元，但密文中单元的位置没有改变13。
替换式密码亦有许多不同类型。如果每一个字母为一单元（或称元素）进行加密操作，就可以称之为“简易替换密码”（simple substitution cipher）或“单表加密”（monoalphabetic cipher）13，另又称为单字母替换加密；以数个字母为一单元则称为“多表加密”（polyalphabetic cipher）13或“表格式加密”（polygraphic）。单表加密只可在一个单元中使用同一种替换加密，而多表加密则可在一个单元使用不同的加密方式，明文单元映射到密文上可以有好几种可能性，反之亦然13。

**简易替换密码**
ROT13是一种偏移13位的凯撒密码
简易替换加密是一种以特定方式改变字母表上字母顺序，并以此顺序书写的加密方式。这样一张改变了字母次序的字母表即为『替换表』。替换表可以以偏移或逆转（分别为凯撒密码和阿特巴希密码（Atbash））或更复杂方式构造，此时称之为『混合表』。传统上会先把一个关键词写在字母表最前面，再删去重复字母，这样就能得到一个混合表。

**例子**
使用混合表系统，关键字为“zebras」：
明文为：
flee at once. we are discovered!
加密结果为：
SIAA ZQ LKBA. VA ZOA RFPBLUAOAR!
传统上，密文会省略标点符号和空格，同时会有一固定长度的单位，以避免传输错误和变相显示明文中单词的边界。这些单位被称为“组”（groups）13，有时叫“组数”（group count）（即组的数量），并使其作为一额外检查。通常都会使用五个字母为一组17，然后使用电报传送消息：
SIAAZ QLKBA VAZOA RFPBL UAOAR
如果该段明文的长度不能被五整除，将需要在最后用“NULL”补齐1-7。这些空字符可以是任何字符，因为解密后可以看出是明显的废话（如ORANG EOOOO），所以接收器可以很容易地发现并将其丢弃。如若接收发现密文的长度不能被五整除，就可以得知传输出错，并要求重新发送。
简易替换密码有时不一定要替换至另一字母，例如在猪圈密码中，密文由格子的符号组成。例子如下：
An example pigpen message
这些功能增加的安全性与以前其实相差不大，因为基本上所有奇怪的符号最后都会转换成A-Z字母。
有时销售人员会在他们的名单和目录中使用非常简单的加密法：用字母来代替数字。
例子：MAT代表120。

**简易替换密码的安全性**
简易替换密码的缺点是字母表中的最后几个字母（其中大多是低使用频率）往往留在最后。加强的办法是在加密后再做一次纵栏式移调，但很多时也没有这样做。
尽管加密用到的密钥可能性很大（26! ≈ 288.4，若88位元），但要破解单表加密却异常容易。只要提供有合理长度的密文（见下文），密码分析就能通过Frequency distribution的分析推断最常见的单元的意义，即频率分析。这使破解者可用剔除法，把有个单元的意思解出来，见一个破解的例子。在某些情况下，可以从它们的字母的格局来破解，例如“attract”和“osseous”是英语中仅有的“ABBCADB”模式的“根”，即如遇见有简易替换密码的密文中出现“ABBCADB”，即可猜测其为“attract”或“osseous”。康乐及报纸拼图等包含着不少这种加密法。
按照英语的Unicity distance，密文平均最少需要27.6个字母才能破解混合表简易替换密码。而在正常情况下，假设遇到的是新排列方式，但通常都需要约50个字母（当中有些密文可以用得比较少）。然而，当密文有极平坦的频率分布，密文长度的需求可能越来越大。同时，加密者可以添加空字元来造成平坦的频率分布。
另外，有另一种方法来“伪造”频率分布，名为漏字文。顾名思义，这些文章会有意避免使用某个或某几个特定字母。如果漏掉的是E，那么若然继续以正常的频率分析（估计最高频率者为E）就不可能找出真正的明文。

**谐音替换法**
巴宾顿阴谋中加密的讯息
早期的加密中，为增加替换式密码应付频率分析攻击的强度，有时会采用“谐音”来改变明文字母频率。在这种加密算法中，明文字母可以映射到多个密文符号。通常情况下，频率最高的明文符号（如E）会比低使用频率的字母（如X）有更多的谐音符号，使频率分布更为平坦，让分析更困难。
但亦因此，只是字母之间互相替换就会造成不够分配，从而有了好几种不同的解决方法。其中最简单的方式可以算是用1-0共10个数字作为某些字母的替换。另一种方法则是将现有的字母分开成原字母配以简单的变化、大写、小写、上下倒转的字母、镜像文字（左右倒转）等。虽然更为艺术化，却不代表一定更安全，其中一些谐音替换法全部使用新发明的奇特符号来代表字母。（参见伏尼契手稿以及爱伦·坡所着的金甲虫）
一种有趣的变化名为nomenclator1-8。此加密法有许多不同的版本，之间的区别来自其前缀。而该前缀来自宣读来访贵宾称号的公职人员名字。这种密码结合一个小型Codebook组成一个大型的谐音替换表。在此密码中，常用单词会按密码本加密，余下字母则按另一本密码本加密，两者符号最后在密文中混起来，以减低简易替换密码中被破解的风险1-8。路易十四所使用的密码是 Rossignols创立的伟大密码，该密码直至法国王室废止后百年才被破解。
15世纪早期至18世纪后期，命名密码是外交文件及间谍最常使用的加密，然而其中大多数仍然使用加密性能较差的命名密码。虽然由十六世纪中叶开始政府情报机构的密码分析员就破解部分命名密码法，但使用者通常的反应仅仅已破解的比尔密码第二段是加大谐音替换表。十八世纪后期，谐音替换系统开始消亡之时，一些命名密码已有高达5万个符号。
然而，并非所有命名密码法都已被破解。直到今天，仍然不时有新的命名密码被破解的新闻。
比尔密码是另一个谐音替换法的例子。这个故事指在1819年至1821年期间由一个加密文本来隐藏美国独立宣言中所述的宝藏。在这里，每个密文字元由一个数字替换。数字代表着独立宣言中第几个字的第一个字母。独立宣言中许多字的首字母都是一样的，而密文数字能是其中任何一个，例如正文中第二和第六个字都是“I”开头，即“I”既可以是2，又可以是6。而解读仅仅就是把密文中的数字（如代数X），放到独立宣言中查找（第X个字的首字母）。
斯塔尔则描述了另一个谐音替换密码，其密码是第一次尝试在电脑的数据库上加密。在斯塔尔的方法中，无论是明文还是密文都是以二进制字符串存储，因此谐音的数量可以非常大，使得频率分析比平常更为困难。
。

**多表替换加密**
在1467年，多表替换密码由莱昂·巴蒂斯塔·阿尔伯蒂以圆碟的形式首次描述。约翰尼斯·特里特米乌斯所着的《隐写术》（Steganographia）中介绍了一种表格（见下；15世纪已完成但很久以后才出版）。1563年，乔瓦尼·巴蒂斯塔·德拉波尔塔在《书写中的隐蔽字符》（De Furtivis Literarum Notis）描述了一个更复杂的混合字母版本139。
在一个多表替换密码中，会使用多个字母作为密码。为了加快加密或解密速度，所有的字母通常写在一张表格上，密码学上称作tableau。这种表格通常是26×26，因为这样才能放下全部26个英文字母。填充表格及选择下次使用的字母的方法，就是不同多字母替换密码之间的定义。多字母替换密码比单字母更难打破，因为其替换可能性多，密文要较长才可。
用来加密和解密的维吉尼亚表格
其中最著名的一种为吉奥万·巴蒂斯塔·贝拉索于1585年推出的维吉尼亚密码34。它于1863年之前一直未被破解。法国人称它作“不能破译的密码”（le chiffre indéchiffrable）。（此密码曾被误以为由布莱斯·德·维吉尼亚所创On the Origin of a Species，所以才叫作维吉尼亚密码。）
维吉尼亚密码中，表格的第一行只需直接填上26个字母，然后以下每一行的字母都是向左偏移一格。（这叫作表格横移，数学上每一列同余26。）要用这种密码需要使用一个关键字来作为密钥。关键字每次用完就再次重复。假设关键字是“CAT”，明文的第一个字由“C”加密，第二个字由“A”加密，第三个则由“T”加密，然后再回到C加密，一直重复。然后按照右边的密码表加密，例如BALL用CAT作关键字时会加密至DAEN，可见即使是同一个“L”亦会加密至另一个字母。现实中，维吉尼亚密码的关键字非常长。
1863年，Friedrich Kasiski少校发明了一种方法（在克里米亚战争前已由查尔斯·巴贝奇秘密并独立地发明），使得可以计算维吉尼亚密码中关键字的长度37。这种方法需要较长的密文，因为其运作依靠找出常见的字（如THE）使用相同关键字（如ABC）的数量，因此，极短的密文难以用此办法找出。
因此，即使在今天，如果在表格中使用混合表加密，或关键字是随机的，维吉尼亚密码理论上亦难以破解。但由于实际上很难用到这些方法，维吉尼亚密码的使用越来越少。
其他著名的多字母替换加密包括：- 格兰示菲特密码 - 与维吉尼亚密码相似，但由于整个密码只使用10个单元，因此关键字长度有限，很容易被破解。- 博福特密码 - 这实际上就是维吉尼亚密码，除“tabula”改为向后偏移一格，数学上是等式为：密文＝键－明文。博福特密码属于对等加密，即加密算法与解密算法相同34。- 自动密钥密码 - 它的密钥开头是一个关键词，之后则是明文的重复，以避免周期函数。- 运动密钥密码，关键词从某些文章或名句中取出，因此可以非常长。
现代的流密码中可以看出，现代的多表替换加密都努力改进流密钥，使其尽可能的长及不可预知。

**表格式替换加密**
。
。
最早的实用表格式替换密码是查尔斯·惠斯登爵士于1854年所创的波雷费密码。在此密码中，5×5的方格中填满了混合字母（两个字母，通常I和J并排，即I等于J）。明文中每两个字母为一单元，通常这个单元会在表上组成一个四方形（单元内容占其中两个角），然后取另外两角为密文。当单元内容在同一列或同一行时（即无法组成四方形），同列者密文为明文往右偏移一格；同行者密文为明文往下偏移一格。单元中两者为同字母者于该单之前添加X（或Q）（即其后全体往后偏移一格）。波雷费密码于第二次波耳战争开始直到第二次世界大战为止一直用于军事用途26。
。
。
。

**机械替换加密**
从第一次世界大战时期开始，直到电脑被广泛使用（某些政府约在20世纪50至60年代开始使；其他组织在十年或更后，1975年前则未有个人使用的纪录），多字母替换密码一直在机械上被广泛应用。几位发明家于同一时间有着类似的想法，1919年间已有四次关于Rotor machine的专利申请。其中最重要并著名的可算是德意志国防军于1930年代所用的恩尼格玛密码机。。
。
。

**一次性密码本**
一次性密码本是一种颇特别的替换密码。它由Joseph Mauborgne于第一次世界大战后期建立。克劳德·夏农约在第二次世界大战期间，在数学上证明它的保密性牢不可破，其过程于1940年末首次出版。在常见的做法中，一次性密码本可以被称为一个单次替换密码。通常情况下，明文字母将以某种方式（通常为逻辑异或）与关键字组合（而不是替换掉）。
一次性密码本在大多数情况下都是不切实际或难以使用，因为它需要关键字跟明文一样（或更）长、“完全”随机、只能使用一次，更要保证除了发送者和接收者之外其它所有人都不知道。当这些条件有一项没有执行，甚至只是极其轻微的违反，一次性密码本便再也不是坚不可摧，甚至一触即溃。美国曾于第二次世界大战期间用非随机的一次性密码本加密讯息，再将其送往苏联。美国的密码学家于40年代开始就能破解极少数一次性密码本。（见维诺那计划）
古巴危机后，莫斯科-华盛顿热线中开始使用一次性密码本来加密讯息718。

**现代密码学中的替换加密**
上述的替换式密码，尤其那些是只需使用铅笔和纸张的手动加密密码，都不再经常使用。然而，即使到了今天，替换加密的概念仍在进步。从一个够新奇的角度来看，现代位元导向式的分组密码（如资料加密标准及高阶加密标准）仍可视为使用大量二进制字母的替换加密。此外，分组密码通常包含较小的替换表，名为S-box3-14，其同时包含逻辑异或算法3-14。参见替换网络。

**流行文化中的替换密码**
跳舞小人密码
乃出个未来中的密码对照表- 夏洛克·福尔摩斯中的跳舞小人，其用跳舞小人替换英语，福尔摩斯最后根据分析字母频率来破解密码。- 最终幻想X中斯毕拉世界的语言实际上是一种替换密码，其发音方法却同为拉丁系统（例如你在英语中是you，然后加密至oui，再以法语来读出oui）。- 乃出个未来中外星人的语言的符号全由英文替换加密而成。观众相当快就破译出来，过程是在“Slurm”（外星人字）和“Drink”（英语）之间找到其密钥。后来，生产商建立了第二套外星人语言，其使用了数学密码的更换和组合。然而，此密码再一次遭破译，方法是将英语转为1至26，转换之后再加上前一个字母的编号，再同余26（亦即代表前字母为Z时后字母不会加密）。这些加密讯息可以从整个系列中每一集和其随后推出的电影中看出。

**参考文献**
书籍- Yardley, Herbert. The American Black Chamber. Bobbs-Merrill, 1931.

**外部连结**
  CrypTool date=20110722183139  网上学习工具-建立并破解替换式密码。-  破解使用了单字母替换加密的工具 date=20200727024145 -  SCB Cipher Solver date=20210115232435  单字母替换加密破解工具-  Substitution cipher implementation with Caesar and Atbash ciphers date=20200809210036 （Java）-  Online simple substitution implementation（Flash）-  MAKEPROFIT加密（把明文放在URL，网页显示结果）-  单字母替换密码 date=20210223234833  使用己知明文攻击来破解单字母替换密码- http://cryptoclub.math.uic.edu/substitutioncipher/sub2.htm date=20081223103658 

**参见**
 Dvorak加密- 维吉尼亚密码- Leet- 仿射密码