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加密解密工具。