ROT47 是一種替換,將 94 個可列印 ASCII 字元(從 ! 到 ~)中的每一個都位移 47 個位置,由於 47 正好是 94 的一半,套用同樣的替換兩次會還原為原始文字,這就是為什麼單一 ROT47 編碼解碼器能同時處理編碼與解碼。如果你從未使用過,好消息是幾乎不需要任何設定:這個工具完全在你的瀏覽器中執行,不需要建立帳號、不需要記住金鑰,也不需要切換到獨立的解碼模式。你貼上文字、按下按鈕、複製結果。其餘值得了解的就是那個單一按鈕對你的字母、數字、標點與空格做了什麼,讓第一次的輸出就能符合你的預期。初學者通常帶著以下三種小任務之一而來:隱藏劇透、在論壇中張貼簡單謎題,或是檢查他們正在撰寫的字元處理流程是否會動到文字。這三種都適用同一套三步驟工作流程,本指南其餘部分會逐步說明該工作流程,以及讓 ROT47 行為可預期的小規則。

ROT47 替換在紙面上的運作原理
從碼點 33 (!) 到碼點 126 (~) 的可列印 ASCII 範圍恰好包含 94 個字元,ROT47 只是在該範圍內將每個字元的碼點加上 47,當結果超過 126 時就會循環。數字 47 並非隨意選定:因為範圍包含 94 個字元,94 的一半就是 47,所以範圍內每個支援的字元都恰好與另一個字元配對。向前移動 47 會到達那個配對字元;再向前移動 47 就會回到原點。這趟來回正是單一按鈕能同時處理兩個方向的 ROT47 編碼解碼器能存在的全部原因。
這與 ROT13 有實質上的不同,後者只輪換英文字母,完全不動數字與標點。如果你把 "Hello, 2024!" 貼進 ROT13 工具,逗號、數字與驚嘆號都會留在原處,你會得到 "Uryyb, 2024!"。同樣的字串丟進 ROT47,逗號、數字與驚嘆號都會移動,因為 ROT47 把它們視為輪換範圍的一部分。這樣更廣的處理範圍正是 ROT47 輸出看起來陌生的原因,也是結果可能包含在 URL、HTML 或正則表示式中具有特殊意義的字元的原因。
有三個特性讓這個轉換易於理解。第一,它是確定性的:同樣的輸入永遠產生同樣的輸出。第二,它保持位置:十個可列印 ASCII 字元進去,會在同一位置得到十個輪換後的字元出來,順序完全不變。第三,輪換範圍之外的任何內容都會逐字元原樣複製,這就是為什麼空格會保留下來,而有腔調字母、CJK 字元與表情符號能在來回轉換中存活,不會被改成 ASCII 或被切半。
為什麼初學者會選擇使用 ROT47 編碼解碼器
ROT47 是謎題編碼,不是加密,而這個區別正是它出現在休閒場合而非嚴肅安全工作的原因。新手最常尋找 ROT47 編碼解碼器的四種情境是:遮罩劇透、論壇謎題、古典密碼的課堂示範,以及測試他們在程式碼中撰寫的字元處理流程。
對於劇透來說,吸引力在於結果不需要讀者端做任何設定就能還原,而這個模式夠容易辨認,任何看過 ROT47 的人都能一眼解開。對於論壇謎題來說,這是長期沿用的慣例:發文者包裹一段詞句,有人回覆解碼,還原後的答案就會出現在討論串中。對於課堂示範來說,單一按鈕的工作流程是個乾淨的方式來展示沒有金鑰的替換式密碼是多容易被破解,而這通常正是講師希望學生領悟到的課題。對於流程測試來說,ROT47 很方便,因為它是確定性的,而且能一次處理每個可列印 ASCII 字元,包括僅處理字母的密碼會忽略的標點。
ROT47 不適合的場景是任何需要機密性的任務。它沒有金鑰、沒有通關密語,還原替換也沒有演算法成本,所以讀者一旦認出這個模式,只要再按一次「套用」就能取回原始內容。經過驗證的產品指引寫得很明確:請勿用於保護憑證、個人資訊或任何其他敏感訊息。
你的第一次編碼與解碼逐步操作
與 ROT47 編碼解碼器的第一次使用大約只需要一分鐘,同樣的三個動作就能處理兩個方向。
- 將你要轉換的完整文字貼到輸入欄位中。工具會保留開頭與結尾的空白字元,所以貼上之前不需要修剪字串。Tab 鍵、換行以及任何帶腔調或非拉丁字元都會原樣通過轉換,只有在忘記標點也會跟著輪換時,輸出才會讓你意外。
- 選擇套用 ROT47,然後等待結果出現。輸出為純文字、可直接複製,其中每個可列印 ASCII 字元都會在同樣的位置產生一個輪換後的字元,而所有未變動的字元會原樣穿插其中。
- 使用你作業系統一般的複製動作把結果複製下來,並用於你原本預計的地方。若要還原操作,把 ROT47 輸出再次貼入同一個輸入欄位,再選擇一次「套用 ROT47」,然後複製還原後的原始內容。
一個具體例子有助於掌握這個工作流程。單一字元 "!" 的碼點是 33,它是輪換範圍中的第一個字元,所以加上 47 之後得到碼點 80,也就是字母 "P"。這就是為什麼 "!" 輪換為 "P",而 "P" 會輪換回 "!"。同樣的算術適用於 33 到 126 範圍內的每個其他字元,而範圍外的字元,包括你在字與字之間輸入的空格,都會原樣複製通過。
如果來回轉換無法精準還原原始文字,常見原因是輸出在工具與最終位置之間發生了某些事:某次貼上動作把智慧引號轉成了普通引號、剪貼簿管理工具把標點刪掉了、中介環節把小於符號轉義掉了,或是某個傳輸過程正規化了換行符號。轉換本身並不會刪除、重排或改寫字元,所以修正方式幾乎總是移除那個中介環節,而不是嘗試不同的模式。
什麼會變動,什麼保持原樣
由於 ROT47 只輪換一個狹窄範圍的碼點,預測輸出最簡單的方法就是知道哪些字元落在範圍內、哪些落在範圍外。下面的參考表格採用工具實際實作的精確區間。
| 類別 | 範例字元 | 碼點範圍 | ROT47 的行為 |
|---|---|---|---|
| 空格 | 單一空格字元 | 32 | 原樣複製,不做更動 |
| 大寫字母 | A 到 Z | 65 到 90 | 在範圍內輪換 47 |
| 小寫字母 | a 到 z | 97 到 122 | 在範圍內輪換 47 |
| 數字 | 0 到 9 | 48 到 57 | 在範圍內輪換 47 |
| 標點與符號 | ! , . ? : ; ( ) [ ] { } < > @ # $ % ^ & * | 33 到 47、58 到 64、91 到 96、123 到 126 | 在範圍內輪換 47 |
| 控制字元 | Tab 鍵、歸位字元、換行字元 | 0 到 31 | 原樣複製,不做更動 |
| 非 ASCII 字母 | é、ñ、ü、ø | 128 及以上 | 原樣複製,不做正規化 |
| CJK 字元 | 中文、日文、韓文文字 | 128 及以上 | 原樣複製,不做更動 |
| 表情符號 | 派對喇叭、火箭 | 128 及以上 | 原樣複製,不會被切成兩半 |
重點在於:空格字元(碼點 32)不需要任何修飾鍵即可輸入,卻落在輪換範圍之外,所以單字周圍可見的間距永遠會停留在你輸入的位置。實作方式是一次一個逐一走訪 Unicode 碼點,檢查每個值是否落在 33 到 126 的區間內,並把落在該區間外的任何內容逐字複製,不會把它轉成 ASCII 或改變其形式。
限制與初次使用的常見陷阱
在你的第一次使用前,有一些實際的界線值得了解,因為它們會決定這個工具能否完成你帶來的任務。
輸入欄位每次提交最多接受 200,000 個 Unicode 碼點,這對很長的段落來說已經足夠,但仍然是有限的;超過這個數量會被拒絕,以維持頁面的回應速度,而空文字也會被拒絕,因為它不會產生有用的轉換結果。前後的空格、Tab 與換行會被精確保留,所以如果貼上的字串帶有刻意縮排,輸出也會帶有相同的縮排。工具不會偵測語言、不會改變大小寫、不會把智慧引號折成一般引號,也不會合併連續的空白,這讓來回轉換保持忠實,但也代表輸出就是替換所產生的結果,包括在當下情境中可能看起來不尋常的標點。
一個微妙的初次陷阱是,ROT47 輸出可能包含在其他系統中具有意義的字元:小於和大於符號、& 符號、反斜線與引號都會輪換,所以把 ROT47 字串直接放進 HTML、URL 參數、shell 指令或正則表示式而沒有轉義,可能會改變接收端系統解讀它的方式。這個頁面只回傳純文字,並未聲稱結果對任何特定語法來說是安全的。
如果複製的結果無法解碼回原始內容,最常見的元凶是把智慧引號轉成普通引號、轉義了標點、或正規化了換行的中介環節。轉換本身在相同區間內是位元穩定的,所以修正方式就是移除介於工具與目的地之間的環節。如需更完整的還原流程說明,請參見修正使用 ROT47 後看起來錯誤的結果指南。
When ROT47 Is Not the Right Tool
ROT47 is a good match for casual, reversible, keyless puzzles and a poor match for anything that pretends to be private. The table below summarizes the most common beginner scenarios so you can decide at a glance.
| Scenario | Fit for ROT47 | Reason |
|---|---|---|
| Hiding a movie or book spoiler in a comment | Yes | Reversible, no key, easy to decode on sight |
| Posting a reversible forum puzzle | Yes | Long-standing convention, single button for both sides |
| Demonstrating classical substitution ciphers in class | Yes | Deterministic, no key management, clear round trip |
| Testing whether a code path preserves text exactly | Yes | Deterministic and position-preserving across all printable ASCII |
| Storing or sending a password | No | No key and immediate reversal, provides no confidentiality |
| Sending a private or personal message | No | Trivially reversible by anyone who recognizes the pattern |
| Encoding a URL parameter value | No | Result can contain characters that break URL syntax; use a URL encoder instead |
| Embedding the output directly in HTML | No | Result can contain <, >, & and quote marks that need HTML entity escaping |
For any row marked No, there is a purpose-built encoding or encryption tool that does the job correctly, and trying to bend ROT47 into those roles usually produces broken output or a false sense of security. Keeping ROT47 in its lane is what makes the tool pleasant to use; the moment a task starts to involve real secrets or real syntax constraints, the right move is to reach for a different tool.
If you're weighing options, Vigenere Cipher Decoder Bulk: Decode Long Ciphertexts covers this in detail.