**注意**：本條目主題可能尚無中文譯名，因而使用原文或其拉丁字母转写作為標題。如果您在可靠來源中找到本主題的中文名稱，请勇于将其移动至中文标题。（2015年12月）

Chaocipher是John F. Byrne于1918年设计出的一套加密系统。 1954年，他在他的自传《Silent Year》中加入了一个用Chaocipher加密后的消息作为谜题来挑战读者。2010年5月，Byrne家族将所有与Chaocipher相关的文件和物件捐献给美国国家密码博物馆（英版维基百科资料（页面存档备份，存于）），Chaocipher的加密方式才就此大白于天下，书中的谜题也由此得到破解（页面存档备份，存于）。

加密方式
----

### 实体模型

实体的加密机**模型**由两个密码盘和基座组成，基座内有齿轮，保证与密码盘连接的两个齿轮旋转方向相反，转速相同。密码盘分为左盘和右盘，左盘为加密后的字母（密文），右盘为加密前的字母（明文）。密码盘可从齿轮上快速卸下。密码盘上各有26个字母，每个字母可从密码盘上快速卸下。

标准的Chaocipher密码字母盘如下：  

```
左盘（按逆时针方向排列）: HXUCZVAMDSLKPEFJRIGTWOBNYQ  

右盘（按顺时针方向排列）: PTLNBQDEOYSFAVZKGJRIHWXUMC  

```

各个人可以指定各自的字母盘

定义两个位置：高点（+），低点（\*）（在密码盘上位置相对）。在我们用字符串表示出的密码盘状态里，两个位点分别对应第一位和第十四位。

加密过程
----

### 准备工作

1、选定一个初始状态：这里我们简单点，就以上面给出的标准盘的顺序。当然我们也可以比如说让左盘从W开头（WOBNYQ...）。加密的文字我们用WELLDONEISBETTERTHANWELLSAID（说得好不如做得好）

### 获取密文

2、在右盘中找到要加密的字母，这里是W。

3、找出W对应的密文（实物模型上相当于将右盘旋转使W在高点，因为会带动左盘，左盘高点对应的字母就是密文。在字符串里我们先直接用感叹号表示出来），这里是O，记下来。  

```
标识：+            *       !  

左：  HXUCZVAMDSLKPEFJRIGTW**O**BNYQ  

右：  PTLNBQDEOYSFAVZKGJRIH**W**XUMC  

```

### 更改码盘

这里是Chaocipher的精髓，通过对码盘的时时变换，把简单的[单字母表对应]转变成了随机关键词对应。

4、刚才在实体模型上我们已经把那两个字符都转到了高位上，但是字符串这儿还没有。转一下。  

```
标识：+            *         

左：  OBNYQHXUCZVAMDSLKPEFJRIGTW  

右：  WXUMCPTLNBQDEOYSFAVZKGJRIH  

```

5、把左盘高位字母逆时针方向的第一个字母取下来（字符串的第二个字母）  

```
标识：+            *         

左：  O.NYQHXUCZVAMDSLKPEFJRIGTW  

右：  WXUMCPTLNBQDEOYSFAVZKGJRIH  

```

6、把从逆时针第二个字母（字符串第三个字母）到低位的所有字母前移一位，并把刚才取下的字母放到低位  

```
标识：+            *       

左：  ONYQHXUCZVAMD**B**SLKPEFJRIGTW  

右：  WXUMCPTLNBQDEOYSFAVZKGJRIH  

```

7、现在是右盘。**转变方式和左盘不同！**先将右盘向逆时针方向旋转一位（对于实体模型，要把右盘卸下来，因为这一步**不能带动左盘旋转**），也就是在字符串上将右盘每个字符前移一位，第一个字符放到最后。  

```
标识：+            *         

左：  ONYQHXUCZVAMDBSLKPEFJRIGTW（左盘不动）  

右：  XUMCPTLNBQDEOYSFAVZKGJRIHW  

```

8、把右盘高位字母顺时针方向的第二个字母取下来（字符串的第三个字母）  

```
标识：+            *         

左：  ONYQHXUCZVAMDBSLKPEFJRIGTW  

右：  XU.CPTLNBQDEOYSFAVZKGJRIHW  

```

9、把从逆时针第三个字母（字符串第四个字母）到低位的所有字母前移一位，并把刚才取下的字母放到低位  

```
标识：+            *         

左：  ONYQHXUCZVAMDBSLKPEFJRIGTW  

右：  XUCPTLNBQDEOY**M**SFAVZKGJRIHW  

```

10、重复获取密文和更改码盘这两个部分直到加密完成。

解码过程
----

跟加密大同小异，只是要从左盘的密文找到右盘对应的明文罢了，码盘更改方式是一样的。

参考资料
----

* *Chaocipher Revealed Algorithm*（页面存档备份，存于）-by Rubin, Moshe (July 2, 2010).

|  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 

|  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 

|  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 

| * 
* 论
* 编
 古典密碼學 |
| --- |
|  |
| 密碼家族 | 

|  |  |
| --- | --- |
| 凱撒 | 
* 仿射 (阿特巴希密碼)
* ROT13
* 维吉尼亚

 |
|  |
| 空密码 | 
* 空密码

 |
|  |
| 一次性密碼本 | 
* 書本（英语：）
* 一次性密碼本

 |
|  |
| Polybius方格 | 
* ADFGVX
* 三分
* 敲打

 |
|  |
| 方格密碼 | 
* 二方（英语：）
* 四方

 |
|  |
| 替換 | 
* 自动密钥
* Chaocipher
* 偉大
* 希尔
* 鍵詞
* 運動密鑰（英语：）

 |
|  |
| 轉置 | 
* 籬笆密碼法

 |
|  |
| 其他 | 
* 阿伯提
* 博福特
* 二分
* Enigma
* 虛無主義者
* 交換字
* 豬圈
* 波雷費
* 多字符
* 波利比奥斯
* Rasterschlüssel 44（英语：）
* Reihenschieber
* Reservehandverfahren
* 密碼棒
* 史密斯加密
* 紙牌
* 散列板
* 點字碼
* VIC密碼

 |

 |
|  |
| 密碼分析 | 
* 频率分析
* 巧合索引
* 卡西斯基试验

 |
|  |
| 其他 | 
* 密碼
* 培根
* 密碼棒
* 散列板
* 表格法

 |

 |

 |
|  |
| 

| * 
* 论
* 编
密码学 |
| --- |
|  |
| 
* 密码学历史
* 密码分析
* 密碼學主題列表

 |
|  |
| 
* 對稱密鑰加密
* 分组密码
* 流密码
* 公开密钥加密
* 密碼雜湊函數
* 訊息鑑別碼
* 随机数
* 隐写术

 |
|  |
| 
* 分类 分类
* 主题 主题
* 专题 专题

 |

 |

 |