ROT13 是一種字母替換,它會將每個 ASCII 大寫字母 A-Z 和每個 ASCII 小寫字母 a-z 在各自的字母表中精確旋轉 13 個位置,同時讓其他所有 UTF-16 程式碼單元保持在原位,因此同一個操作可以對相同的文字進行編碼和解碼。將該映射套用兩次,每個被移動的字母就會回到原始位置,因為 26 個字母的字母表可以整除為兩半各 13 個,這種對稱特性稱為 ROT13 的自反性質。一個快速的 ROT13 解碼器範例能清楚說明:Hello, World! 會變成 Uryyb, Jbeyq! —— H 移到 U、e 移到 r、l 移到 y、o 移到 b、W 移到 J、r 移到 e、d 移到 q —— 而逗號、空格和驚嘆號則原封不動地保持在原本的位置。混合內容的行為也相同:Order #42 — ship by Friday! 會旋轉成 Bqre #42 — fuvc ol Sevqny!,因為只有 ASCII 字母會旋轉,而數字 4 和 2、長破折號以及空格都完全保持在原處。這種嚴格且範圍明確的行為,正對應於 Python 標準程式庫中內建的官方 rot_13 編解碼器,而瀏覽器中的 ROT13 編碼解碼器 就是逐字元套用這個規則,不會嘗試去解讀輸入內容。

一覽 ROT13 字母位移
由於字母表包含 26 個字母,ROT13 只是將前半段與後半段對調。字母 A 變成 N、B 變成 O、C 變成 P,依此類推到 M 變成 Z;接著開始循環,N 對應回 A、O 對應 B、Z 對應 M。小寫字母表則以完全相同的方式獨立運作,因此 a 對應到 n、b 到 o、m 到 z、n 到 a、z 到 m。工具會分別處理這兩個 ASCII 字母表,而不是變更大小寫或參考任何地區設定相關的字母表,因此大寫字母始終保持大寫,小寫字母始終保持小寫。
單一大寫字母的運算機制可以寫成一個簡短的公式。以字母 H 為例,它的 ASCII 碼是 72。減去大寫基準值 65,得到它在字母表中的位置 7。將該位置加上 13,得到 20。取 20 除以 26 的餘數(它已經在字母表範圍內,所以仍然是 20)。再加上大寫基準值 65,得到 85。ASCII 碼 85 對應字母 U,這正是 ROT13 對 H 產生的結果。小寫字母遵循相同的模式,基準值為 97,因此 ASCII 碼 104 的 h 會變成 ASCII 碼 117 的 u。如需每個字母配對的可查詢對照表,ROT13 解碼器速查表:ASCII 對應與使用方式 在畫面上提供完整的 ASCII 對應,方便快速驗證。
| 原文 | ROT13 | 原文 | ROT13 |
|---|---|---|---|
| A | N | N | A |
| B | O | O | B |
| C | P | P | C |
| D | Q | Q | D |
| E | R | R | E |
| F | S | S | F |
| G | T | T | G |
| H | U | U | H |
| I | V | V | I |
| J | W | W | J |
| K | X | X | K |
| L | Y | Y | L |
| M | Z | Z | M |
ROT13 解碼器範例:前後文字對照
簡短、可手動驗證的對照組能一目了然地展示所有重要行為。下方每組都以第一行顯示原文,第二行顯示 ROT13 輸出。
- Hello, World! → Uryyb, Jbeyq! —— 每個 ASCII 字母都會旋轉(H 到 U、e 到 r、l 到 y、l 到 y、o 到 b、W 到 J、o 到 b、r 到 e、l 到 y、d 到 q),而逗號、空格和驚嘆號保持不動。
- Order #42 — ship by Friday! → Bqre #42 — fuvc ol Sevqny! —— 只有 ASCII 字母會旋轉;數字 4 和 2、井號、長破折號以及空格全部原封不動地通過。
- café → pnsé —— c、a 和 f 是 ASCII 字母,正常旋轉,但 é 不是 ASCII 字元,因此保持原樣不變。
- e 後接 U+0301(組合用尖音符) → r 後接 U+0301 —— 只有 ASCII 字母 e 旋轉成 r;組合記號則保持附加在後續的程式碼單元上。
- Hello 🎉 世界 → Uryyb 🎉 世界 —— 每個非 ASCII 程式碼單元,包括表情符號的代理對以及兩個 CJK 字元,都保持在相同位置。
這些對照組也讓自反性質一目了然:對 Uryyb, Jbeyq! 套用 ROT13 會完全重現 Hello, World!,而對 Bqre #42 — fuvc ol Sevqny! 再套用一次則會完全重現 Order #42 — ship by Friday!。輸出旁顯示的變更字母數,正對應於每組中旋轉過的 ASCII 字母數量:第一組 10 個字母、第二組 17 個、第三組 3 個、第四組 1 個、第五組 5 個。
如何使用 ROT13 編碼解碼器工具
貼上文字、套用 ROT13、檢視結果,然後複製或還原。整個工具完全在當前的瀏覽器分頁中執行,因此在使用者明確複製輸出之前,任何資料都不會離開裝置。
- 在瀏覽器中開啟 ROT13 編碼解碼器。
- 將包含任意混合的 ASCII 字母與其他字元的文字,貼到輸入區域中。
- 選擇「Apply ROT13」來觸發旋轉。
- 檢視轉換後的輸出,以及已變更的 ASCII 字母數量。
- 使用複製按鈕複製結果,或再次套用 ROT13 以還原原始文字。
編輯來源會清除先前的結果、統計資料、複製狀態以及任何驗證錯誤,如此一來陳舊的值就不會誤導讀者。空白的輸入會在轉換前被拒絕;非空白的輸入若完全不包含 ASCII 字母,仍會產生有效的結果,且變更數為零。輸入上限為 1,000,000 個 UTF-16 程式碼單元,超過該上限一個程式碼單位的輸入會在轉換前被拒絕並顯示明確訊息,而不是被靜默地截斷或取樣。
為何同一操作既可編碼也可解碼
ROT13 是 Caesar cipher 的一個特例,採用固定的位移值 13。在 26 個字母的字母表中,套用兩次位移 13 等於位移 26,讓每個字母回到起始位置。形式上來說,對於任何受支援的字母 x,ROT13(ROT13(x)) 等於 x。正是這種對稱性,讓同一個工具能同時處理兩個方向,因此沒有獨立的解碼按鈕 —— 解碼只是對已編碼文字再進行一次編碼。
同一特性也解釋了為何第三次套用 ROT13 會產生與第一次相同的輸出,以及為何套用奇數次會產生編碼形式,而套用偶數次則會產生原始文字。兩次操作可還原來源,四次操作又會再次產生來源,依此類推。由於映射是確定且範圍明確的,瀏覽器工具絕不會遺失兩個受支援 ASCII 字母表中的資訊。
保持不變的字元
這個映射刻意範圍很窄。只有 ASCII 大寫 A 到 Z 和小寫 a 到 z 會被轉換;其他每個程式碼單元都會原封不動地保留在原來的位置。這種嚴格的行為對應於 Python 官方 rot_13 編解碼器原始碼,該實作提供了直接的字母表對照表交叉驗證,而不是通用的 Unicode 轉換。
| 字元類別 | 範例 | ROT13 下的行為 |
|---|---|---|
| ASCII A-Z | ABC, Hello | 每個字母位移到前方 13 個位置的字母 |
| ASCII a-z | abc, hello | 每個字母位移到前方 13 個位置的字母 |
| 數字 0-9 | 0, 42, 2024 | 保持不變 |
| 常見標點符號 | ! ? , . : ; ' " | 保持不變 |
| 空白字元 | 空格、Tab、換行 | 保持不變 |
| 帶腔調拉丁字母 | é, ñ, ü, ç | 保持不變 |
| 希臘、西里爾、阿拉伯字母 | α, Ж, ع | 保持不變 |
| CJK 字元 | 中,日本語,한글 | 保持不變 |
| 表情符號 | 🎉, 🚀 | 保持不變 |
| 組合記號 | U+0301, U+0302 | 保持不變,附加在後續的程式碼單元上 |
輸出旁顯示的變更字母數正好對應前兩組的列數:它只計算實際旋轉的 ASCII 字母,絕不會把數字、腔調字母或其他程式碼單元摻入來膨脹數字。每個符合條件的字母必定會變成另一個 ASCII 字母,因此這個計數也就是值發生變化的程式碼單元位置的數量。輸出的長度(以 UTF-16 程式碼單元計算)永遠等於輸入的長度,因為每個被轉換的 ASCII 程式碼單元都會被恰好一個 ASCII 程式碼單元取代,而其他每個程式碼單元都會被保留。
ROT13 解碼器範例的實際用途
ROT13 數十年來一直是 Usenet 電子佈告欄和線上論壇的常用工具。常見的休閒用途包括:模糊化劇透內容,讓謎題的解答或電影情節在讀者快速捲動時不會以明文形式出現;隱藏可能讓部分讀者不想意外看到的笑點;以及讓示範用的命令列、檔案路徑或日誌片段在截圖或快速瀏覽時不容易一目了然。RFC 1855(網路禮儀指南)將 ROT13 描述為一個實用的工具,用於處理讀者可能選擇避免意外看到的內容。
除了歷史上的用途之外,ROT13 也是一個受歡迎的教學範例。剛開始學習替換式密碼的初學者,經常以 ROT13 解碼器範例來練習,因為映射範圍小、具確定性,而且可以透過觀察直接還原。它也是編碼器管線、字元類別正規表示式與地區設定處理方式的可靠測試素材,以及快速判斷某段程式碼是否意外變更大小寫或去除 Unicode 字元的便捷方法。任何需要可還原、公開、無金鑰轉換的場景都很適合;任何需要保密性的場景則不適合。
限制與安全性注意事項
ROT13 並非安全的加密方式。它沒有金鑰,每次轉換都使用相同的公開替換規則,任何認出這種模式的人只要再套用一次 ROT13 就能立即還原。它不應該用於保護密碼、API 權杖、個人資訊、私訊、正式環境設定組態或任何其他機密。它只是一種休閒用的可還原模糊化,僅此而已。
瀏覽器工具也有嚴格且已記載的限制。輸入上限為 1,000,000 個 UTF-16 程式碼單元,正好在邊界值的輸入會被完整接受並轉換;超過該上限一個程式碼單位的輸入會在轉換前被拒絕並顯示明確訊息,而不是被靜默地截斷、取樣或限制上限。NUL 被視為普通的字串資料,而不是 C 風格的字串結束符。本工具不支援任意 Caesar 位移、數字專用的 ROT5、ROT18、ROT47、Unicode 音譯、語言感知替換、壓縮或加密。如需可設定的 ASCII 位移,Caesar Cipher 工具是合適的鄰居;若是真正需要機密性,則必須使用經過稽核的密碼學系統。
延伸閱讀:規劃使用 ROT47 編碼解碼器的步驟。