ROT13 是一種自我反轉的文字轉換,它會將每個 ASCII 大寫字母 A–Z 與每個 ASCII 小寫字母 a–z 在各自的字母表中精確位移 13 個位置,而輸入中的其他字元則完全不變。 在 CyberChef 風格的工作流程中,這個操作會以單一食譜步驟的形式出現,左側接收純文字,套用位移後在右側輸出結果。一個專注於瀏覽器的 ROT13 解碼器能重現這個行為,而不需要 CyberChef 的其餘堆疊,所以貼上、執行、複製就完全取代了食譜建構器,並且把結果再送回同一個動作會精確地還原原始字串。由於 ASCII 字母表有 26 個字母,位移 13 本身就是自己的反函數:A 對應到 N、N 對應到 A、a 對應到 n、n 對應到 a,依此類推到 Z 與 z。這個轉換刻意對數字、標點、空格、換行、帶腔調的拉丁字母、希臘文、西里爾文、阿拉伯文、CJK 字元、組合記號或表情符號都不做任何處理,這就是為什麼 ROT13 步驟可以與 Base64、十六進位或 XOR 並排在 CyberChef 食譜中,而不會干擾周圍的其他步驟。

rot13 decoder cyberchef
ROT13 解碼器線上版:CyberChef 風格的瀏覽器工具

如何在瀏覽器中套用與反轉 ROT13

從「我有一段文字」到「我有它的 ROT13 形式」的最快路徑,反映了 CyberChef 使用者建立單步驟食譜的方式,但完全跳過食譜建構器。開啟 ROT13 編碼解碼器 工具,貼上你的文字,執行該動作,然後在實際被位移的 ASCII 字母數量旁邊讀取轉換後的輸出。

  1. 貼上包含任何 ASCII 字母與其他字元組合的文字。你可以包含數字、標點、空白字元、帶腔調的字元、CJK 字串、表情符號以及 NUL 位元組;它們都會原封不動地通過。
  2. 套用 ROT13 並檢視轉換後的輸出,以及被變更的 ASCII 字母數量。這個數量會告訴你有多少個 A–Z 或 a–z 程式碼單元被對應,這也是值被改變的程式碼單元位置的數量。
  3. 複製結果,或對該結果再套用一次 ROT13 以還原原始文字。因為這個操作本身就是自己的反函數,再執行一次就是「解碼」 ROT13 輸出的正確方式。

編輯來源或執行新的轉換會清除先前的結果、任何錯誤訊息、統計資料,以及任何進行中的複製確認,因此顯示的輸出永遠反映目前的輸入。如果你的剪貼簿內容超過 1,000,000 個 UTF-16 程式碼單元,工具會在任何轉換執行之前以明確訊息拒絕該輸入,而空輸入則會在最開始就被拒絕。沒有 ASCII 字母的非空內容是一個完全有效的轉換,且變更數量為零,這在你確認 ROT13 沒有任何東西可以位移時就是正確答案。

從 CyberChef 的食譜檢視到單一用途工具

CyberChef 的名聲來自於將許多操作串連在一起:Base64、十六進位、regex、XOR 暴力破解、JWT 檢查以及 ROT13,全部在同一個工作流程面板中。對於 CTF 挑戰或快速的解碼來說,當你實際需要的唯一步驟就是 ROT13 時,這種強大功能反而是殺雞用牛刀。一個專門的線上 ROT13 解碼器把食譜建構器、操作搜尋框與輸出面板壓縮成單一頁面,貼上、執行、複製就是整個工作流程。沒有任何資料會透過網路傳送;轉換、被變更字母的數量以及剪貼簿準備工作都在目前的瀏覽器分頁中完成。

面向CyberChef 食譜專注的瀏覽器 ROT13 解碼器
設定開啟食譜建構器,搜尋「ROT13」,將該操作拖曳到串鏈中開啟單一頁面,ROT13 動作已準備就緒
輸入處理作用中食譜接受的任何字串貼上任何 ASCII 字母與其他 Unicode 的組合;空輸入會被拒絕
對應範圍ASCII A–Z 與 a–Z 位移 13;其他全部保留完全相同:ASCII A–Z 與 a–z 位移 13;其他全部保留
變更字元回饋輸出位元組長度顯示在輸出面板中在輸出旁邊顯示已位移 ASCII 字母的專屬數量
反轉對輸出再套用一次 ROT13對輸出再套用一次 ROT13
網路使用本機瀏覽器應用程式,不上傳食譜資料本機瀏覽器分頁,不上傳輸入、輸出或剪貼簿內容
最佳適用情境搭配 Base64、十六進位、XOR、regex 的多步驟解碼串鏈純粹的 ROT13 工作,或在 CyberChef 步驟之後進行快速健全性檢查

這兩種方法不是對手;它們是同一個光譜上的不同位置。當 CTF 串鏈結束於 ROT13 而你想確認 CyberChef 產生了什麼結果時,一個專門的工具能在更小的表面積中提供相同的字母對應,這在手機上、受限的瀏覽器中,或單純不想為了單一步驟而載入整個 CyberChef 套件時也很有用。

究竟哪些字元會被位移

ROT13 的範圍刻意很窄,而這種窄正是它可預測性的來源。這個轉換只會比對 ASCII 大寫 A 到 Z 以及 ASCII 小寫 a 到 z。對於每個比對到的大寫字母,工具會減去 65,加上 13 mod 26,然後加回 65;對於每個比對到的小寫字母,則減去 97,加上 13 mod 26,然後加回 97。兩個字母表是獨立位移的,所以大寫輸入永遠產生大寫輸出,小寫輸入永遠產生小寫輸出。A 變成 N,N 變成 A,Z 變成 M,a 變成 n,n 對應到 a,z 變成 m,其他每個比對到的字母都遵循字母環上的相同模式。

其他所有內容都會被精確保留。數字、標點、空格、定位字元、換行以及 NUL 位元組會以相同的位置與相同的值出現在輸出中。帶腔調的拉丁字母(例如 é、ç 或 ñ)不是 ASCII A–Z 或 a–z,因此會逐位元組通過。一個組合序列(例如小寫字母 e 後面接著 U+0301)只會改變 ASCII 的 e,而組合尖音符則保留在原位;因此結果是 p 後面接著 U+0301,而不是「被位移的 é」。同樣的邏輯會保留希臘文、西里爾文、阿拉伯文以及 CJK 字串,同樣的邏輯也會將表情符號作為完整的代理對保留。作為具體說明,字串 "café" 會變成 "pnsé",因為 c、a 和 f 是 ASCII 字母,而 é 不是。

輸出長度永遠等於以 UTF-16 程式碼單元計算的輸入長度,因為每個被位移的 ASCII 程式碼單元會被恰好一個 ASCII 程式碼單元取代,而其他每個程式碼單元都會被保留。因此,輸出旁顯示的變更字母數量也就是值被改變的程式碼單元位置的數量,而一個表情符號代理對對該數量的貢獻為零,因為它的兩個半段都不是 ASCII 字母。

ROT13 是可逆編碼,不是加密

ROT13 沒有金鑰,對每個輸入套用相同的公開替換規則,並且任何認出它的人都能立即反轉。這使得它出於與 CyberChef 使用者多年來依賴的相同隨意理由而有用:將劇透隱藏在單行程式碼後方、防止不小心瞥見謎題答案,或讓一行文字避開自動化掃描器的關鍵字清單。RFC 1855 將這個轉換歸類於隨意混淆用途,並將其視為可讀性開關而非機密性機制。

Python 標準函式庫記錄了相同的範圍。codecs 文件將 rot_13 描述為字串對字串的文字轉換,而 rot_13 codec 源碼 提供了一個直接的字母表交叉檢查,符合此工具處理的兩個 ASCII 範圍。ROT13 不是密碼保護,不是身分驗證,不是完整性保護,不是雜湊,也不是存取控制。如果你需要可設定且保留大小寫的 ASCII 位移,請使用 Caesar cipher 工具;如果你需要真正的機密性,請使用經過稽核的加密系統,例如搭配真實金鑰的 AES。

你可以在線上執行的常見 CyberChef 風格任務

一個專注的 ROT13 解碼器涵蓋了 CyberChef 使用者會去抓 ROT13 操作的日常情境,而不會拖進整個工具箱。你可以貼上一段充滿劇透的段落,並將它替換成 ROT13 形式,讓讀者必須主動選擇才能看到揭曉。你可以將 CyberChef 食譜中 Base64 或十六進位步驟的輸出透過 ROT13 執行,作為重新編碼之前的快速健全性檢查。你可以位移一個單字來確認字母對應符合你的記憶(A ↔ N、B ↔ O,依此類推),你也可以套用兩次轉換來驗證來回處理在位元組層級是穩定的,即使輸入包含數字、標點、帶腔調字母或表情符號。

由於這個操作本身就是自己的反函數,你也可以使用同一個工具來解碼 ROT13 文字,只要貼上它並再執行一次該動作即可;沒有獨立的「解碼」按鈕,這符合 CyberChef ROT13 操作所使用的慣例。輸出旁的變更字母數量會告訴你是否真的發生了任何位移:一個完全由數字、標點和表情符號組成的非空字串會報告數量為零,而一個即使只有一個 ASCII 字母的字串則會報告一個或更多。這個數量是一種便宜且可靠的方式,用來區分「ROT13 做了某些事」與「ROT13 沒什麼可做」,這通常是你在逐步檢查未知編碼資料時會問的第一個問題。

想深入了解,請參閱如何正確使用 ROT47 編碼解碼器?。

想深入了解,請參閱嚴格 UTF-8 編碼/解碼器:十六進位、十進位與二進位位元組。