Rot47

**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））。

轉換可以利用尋找表完成，如下例所示：

例如，下面的英文笑話，精華句為 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 是凱撒密碼加密演算法的特例。西元前一世紀尤利烏斯・凱撒發明凱薩加密法。更具體的例子是伐蹉衍那加密（Vatsyayana cipher），該密碼描述了《欲經》整本經文。

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。

## 字母遊戲與網路文化

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. 
... 加密成為... 
%96 "F:4< qC@H? u@I yF>AD ~G6C %96 {2KJ s@8]

程式設計裡標準的 GNU C 函式庫包含了一個函式 —**memfrob()**— 它與 ROT13 有類似的效果，儘管該函式使用物件是任意雙位元組資料。memfrob() 透過每個位元與雙位元模板 00101010（42）做互斥（XOR）運算合併。這個效果是一種簡單的 XOR 操作。與 ROT13 相似， memfrob() 也是自我逆反的，故提供的保全程度好不到哪裡去。

## 參見

* 密碼分析

## 注釋與參考資料

## 外部連結

* ROT5 與 ROT13 線上轉換器（頁面存檔備份，存於網際網路檔案館）（不用 JavaScript）
* 各種程式語言版本的 ROT13 軟體 — 包括 SSH 補丁讓它加入 ROT13 支援，以及對映的密碼分析工具，用來自動分別 ROT13 文字與純文字。
* 在線的 ROT13 加密解密工具（頁面存檔備份，存於網際網路檔案館）。