ROT13

ROT13（回转13位，rotate by 13 places，有时也记为ROT-13）是一种简易的替换式密码。ROT13是一种在英文网络论坛用作隐藏八卦（spoiler）、妙句、谜题解答以及某些脏话的工具，目的是逃过版主或管理员的匆匆一瞥。ROT13被描述成“杂志字谜上下颠倒解答的Usenet对等体”。（Usenet equivalent of a magazine printing the answer to a quiz upside down.）ROT13 也是过去在古罗马开发的凯撒加密的一种变体。

ROT13是它自己本身的逆反；也就是说，要还原ROT13，套用加密同样的算法即可得，故同样的操作可用再加密与解密。该算法并没有提供真正的密码学上的保全，故它不应该被套用在需要保全的用途上。它常常被当作弱加密范例的典型。ROT13激励了广泛的线上书信撰写与字母游戏，且它常于新闻群组对话中被提及。

## 描述

套用ROT13到一段文字上仅仅只需要检查字元字母顺序并取代它在13位之后的对应字母，有需要超过时则重新绕回26英文字母开头即可。

A换成N、B换成O、依此类推到M换成Z，然后序列反转：N换成A、O换成B、最后Z换成M。只有这些出现在英文字母里头的字元受影响；数字、符号、空白字元以及所有其他字元都不变。因为只有在英文字母表里头只有26个，并且26 = 2 × 13，ROT13函数是它自己的逆反：

对任何字元 x： $\mbox{ROT}_{13}(\mbox{ROT}_{13}(x))=\mbox{ROT}_{26}(x)=x$。

换句话说，两个连续的ROT13应用函式会回复原始文字（在数学上，这有时称之为对合（involution）；在密码学上，这叫做对等加密（reciprocal cipher））。

转换可以利用查找表完成，如下例所示：

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz NOPQRSTUVWXYZABCDEFGHIJKLMnopqrstuvwxyzabcdefghijklm

例如，下面的英文笑话，精华句为ROT13所隐匿：

```
How can you tell an extrovert from an
introvert at [[美国国家安全局|NSA]]? Va gur ryringbef,
gur rkgebireg ybbxf ng gur BGURE thl'f fubrf.
```

透过ROT13表格转换整片文字，该笑话的解答揭露如下：

```
Ubj pna lbh gryy na rkgebireg sebz na
vagebireg ng AFN? In the elevators,
the extrovert looks at the OTHER guy's shoes.
```

第二次ROT13函数将转回原始文字。

## 用途

ROT13过去在1980年代早期的net.jokes新闻群组里使用。它被用来隐藏某些可能侮辱到特定读者的笑话、隐晦某个谜题的答案或八卦性的内容。之所以选一次13个字母的位移而不是其他值（例如原本凯撒加密里的3字母位移）乃因13位这个值刚刚好加密解密都是一样，故只要一行命令就可以简洁的满足两者需要。ROT13一般是新闻阅读软件内建支援的功能。电子邮件位址有时也以ROT13编码以躲过较不复杂的垃圾邮件机器人耳目。

ROT13是凯撒密码加密算法的特例。公元前一世纪尤利乌斯·凯撒发明凯萨加密法。

ROT13并不意图用在重视机密性的场合。固定位移的使用意味着该加密实际上并没有金钥，而且解码不需要对ROT13实际上的使用有较深了解。即使没有ROT13使用的知识，该算法也相当容易透过频率分析破解。正因为其完全不适合真正的机密用途，ROT13已经变成了一种警句，用来影射任何显著的弱加密体系；例如批评家可能会这样说：“56位元DES这些日子以来只比ROT13要好一点。”另外，作为对真正术语像“双重DES”的嘲讽，半路杀出的术语“双重ROT13”、“ROT26”、“2ROT13”、以及玩笑性质的学术论文“关于2ROT13加密算法”都闪烁著幽默的心思。因为套用ROT13到已经加密过的ROT13文字，将会打回原形；也就是说，ROT26等于没有加密。延伸下去，三重ROT13（用来取笑其对比的 3DES）等同于1次ROT13而已。

于1999年12月，人们发现网景通讯家利用ROT13作为其储存email密码的不安全体系。在2001年，俄罗斯程序员狄米区·史盖里亚罗夫（Dimitry Sklyarov）展示eBook贩卖商New Paradigm Research Group（NPRG）使用ROT13来对它们的文件加密；据推测NPRG可能把ROT13玩具样本——跟着Adobe eBook软件开发工具包一起提供——用错在重大加密体系上。Windows XP也在某些注册表键上使用ROT13。

## 字母游戏与网络文化

abcdefghijklmnopqrstuvwxyzNOPQRSTUVWXYZABCDEFGHIJKLM

aha ↔ nun｜ant ↔ nag

balk ↔ onyx｜bar ↔ one

barf ↔ ones｜be ↔ or

bin ↔ ova｜ebbs ↔ roof

envy ↔ rail｜er ↔ re

errs ↔ reef｜flap ↔ sync

fur ↔ she｜gel ↔ try

gnat ↔ tang｜irk ↔ vex

clerk ↔ pyrex｜purely ↔ cheryl

PNG ↔ cat｜SHA ↔ fun

furby ↔ sheol｜terra ↔ green

what ↔ Jung｜URL ↔ hey

purpura ↔ Chechen｜shone ↔ FUBAR

ROT13为字母游戏提供了良机。许多字经过ROT13转换后，会产生另一个字。英文里字最长的范例是一组7个字母的字 abjurer 与 nowhere；另一组七字母的是chechen 与 purpura。其他字的范例如表中所示。

1989年国际C语言混乱代码大赛（IOCCC）收录了一个来自布来恩·卫斯里（Brian Westley）的作品。卫斯里的计算机程序可被ROT13编解码，并且仍旧正确的通过编译。该程式主要是进行ROT13编码，或者反过来解码其输入。

新闻群组alt.folklore.urban创造了生字：furrfu，该字是常用状声辞“嘘”（sheesh）的ROT13编码。“Furrfu”在1992年中期首度出现。当时在alt.folklore.urban新闻群组里许多都会传奇的众多水帖里，新手过度使用“Sheesh!”而遭到某些发帖人抱怨，而这些新手对此所作的回应。

## 变体

ROT47是ROT13的衍生物，它除了打乱基本字母外，也对数字与常见符号做处理。除了使用A–Z系列外，ROT47使用范围较广的ASCII字符集。具体而言，所有7-bit可打印字元，除空白以外，从十进制 33 '!' 到 126 '~'都被毫无保留的用来做47位循环。使用较广的字母集原意是产生比ROT13更彻底的乱码，不过因为ROT47无差别地将数字与符号混合导入，导致这种方式较容易看出某串文字被动过手脚。

ROT47的范例：

The Quick Brown Fox Jumps Over The Lazy Dog.

...加密成为...

程序设计里标准的GNU C 函式库包含了一个函式 —memfrob— 它与ROT13有类似的效果，尽管该函式使用对象是任意双字节资料。memfrob透过每个位元与双位元模板00101010（42）做互斥（XOR）运算合并。这个效果是一种简单的XOR操作。与ROT13相似， memfrob也是自我逆反的，故提供的保全程度好不到哪里去。

## 外部链接

- ROT5 与 ROT13 线上转换器（不用JavaScript）
- 各种程式语言版本的ROT13软件 — 包括SSH补丁让它加入ROT13支援，以及对映的密码分析工具，用来自动分别ROT13文字与纯文字。
- 在线的ROT13加密解密工具。