ROT47 會把從驚嘆號(字碼點 33)到波浪號(字碼點 126)之間所有可列印 ASCII 字元,在該 94 字元範圍內精確旋轉 47 個位置;而同一動作既可加密也可解密,因為套用兩次會讓每個值走完整個 94 個位置並回到原值。若要比較使用 ROT47 編碼解碼器的各種做法,你可以手動對字碼點進行算術運算、在程式語言中執行短腳本,或開啟在瀏覽器中本機執行並能用一類按鈕複製結果的線上工具。瀏覽器做法讓你不必撰寫程式碼、避免模組運算中 off-by-one 錯誤的風險,且因為不會上傳任何資料,所以文字都留在你的機器上。手動計算能幫助你內化規則,但無法擴展到大量字元。腳本執行快速且可重複用於批次處理,但需要你維護實作並正確處理 Unicode。每種做法在規則實作正確時都會產生相同的確定性輸出,因此差異只在於便利性、可重複性以及計算在哪裡執行。

ROT47 對可列印 ASCII 的作用
ROT47 作用於可列印 ASCII 區塊,範圍從驚嘆號(字碼點 33)到波浪號(字碼點 126),總共恰好 94 個字元,記載於 Unicode Basic Latin 字表。由於該範圍共有 94 個字元,旋轉其一半(即 47 個位置)會讓每個受支援字元恰好與同一區塊內的一個 partner 配對。每個字碼點的數學規則是可重現的:
輸出 = 33 + ((輸入 − 33 + 47) mod 94)
以一個例子說明,大寫字母 H 位於字碼點 72。代入公式得到 33 + ((72 − 33 + 47) mod 94),化簡為 33 + (86 mod 94),再變成 33 + 86,最後是 119。字碼點 119 是小寫字母 w,因此 H 旋轉為 w。這種配對就是自反性質:每個字元都有一個 partner,且套用該運算兩次會走回原本的輸入。這就是為什麼同一類「套用」按鈕可以同時處理編碼與解碼。
33–126 區間外的字元不會被旋轉。空白字元位於字碼點 32,會留在原位。控制字元、定位字元(tab)與換行字元落在更遠的範圍外,也會原封不動地複製過去。帶腔音符的字母、CJK 表意文字、表情符號等非 ASCII 字元都遠高於 126,正確的實作會原樣複製它們,而不是將其正規化或拆成 UTF-16 半段。
套用 ROT47 的三種做法
你可以用三種常見方式套用 ROT47,在規則實作正確時,每種都會產生相同的輸出。差異在於設定時間、可重複性以及計算發生的位置。
| 做法 | 所需準備 | 執行位置 | 適用情境 |
|---|---|---|---|
| 對字碼點進行手動算術運算 | 計算機或紙筆 | 你的腦袋 | 學習規則;一兩個字元;驗證其他工具 |
| 短程式腳本 | 程式編輯器與執行環境(Python、JavaScript 等) | 你的本機 | 批次處理;與現有流程整合 |
| 瀏覽器式編碼解碼器 | 一個網頁 | 你的瀏覽器(本機端) | 快速單次轉換;非開發人員;保留非 ASCII 內容 |
當你想要確認工具是否產生正確結果,或只需要檢查少數幾個字元時,手動計算很有用。它無法擴展,而且模組運算的誤算次數往往超出你的預期。腳本一旦撰寫並測試完成後是可靠的,但你必須維護實作,並在文字含純 ASCII 以外的內容時正確處理 Unicode。ROT47 編碼解碼器 在你的瀏覽器中執行相同的公式且無需上傳,保留空白、定位字元、換行字元與非 ASCII 字元的原貌,讓你用一類按鈕即可複製結果。
如何在瀏覽器中套用 ROT47
- 將你想轉換的確切文字貼到輸入欄位。空白、定位字元、換行字元,以及表情符號或帶腔音符字母等非 ASCII 字元都會原樣保留。
- 選擇「套用 ROT47」按鈕。工具會逐一檢視輸入中的每個 Unicode 字碼點,將 33 到 126 之間的可列印 ASCII 值旋轉 47 個位置,並在不修改的情況下複製該範圍以外的任何內容。
- 從輸出區域將產生的可列印 ASCII 替換結果複製到剪貼簿。
- 若要解碼,請將 ROT47 輸出再次貼到同一個輸入欄位,並再次選擇「套用 ROT47」。由於此運算為自反,原本的文字會重新出現。
此工具完全在你的瀏覽器中執行,因此不會有任何文字離開你的裝置。輸入上限為 200,000 個 Unicode 字碼點,以保持轉換反應速度;空輸入會被拒絕,因為它不會產生任何有用的轉換。前後空白會被保留,不會被修剪或正規化。
ROT47 與 ROT13 以及凱撒位移的比較
ROT47 常與 ROT13 和凱撒密碼一同提及,但這三種轉換涵蓋不同的字元集,並提供不同的保證。
| 轉換方式 | 受影響的字元 | 位移量 | 是否自反? |
|---|---|---|---|
| 凱撒位移(1–25) | 大寫 A–Z 與小寫 a–z | 可變,由使用者選擇 | 僅在位移 13 時 |
| ROT13 | 大寫 A–Z 與小寫 a–z | 固定為 13 | 是 |
| ROT47 | 所有可列印 ASCII(! 到 ~) | 固定為 47 | 是 |
ROT13 是凱撒密碼的一個特例,其位移恰好為字母表大小的一半,因此對 26 個字母的拉丁字母表而言是自反的。ROT47 將相同的概念應用於更大的 94 字元可列印 ASCII 區塊。由於該區塊包含數字與標點,逗號、括號、數字或符號都能與文字一起變動,這是 ROT13 永遠不會發生的情況。如果你只需要模糊英文文字並希望保留標點不變,ROT13 編碼解碼器 是更專注的工具。如果你的文字混合了文字、數字與符號,ROT47 能在一次處理中轉換整個可列印表面。
各做法保留與不保留的部分
無論你選擇哪種做法,相同的保留規則都適用,因為它們是可列印 ASCII 區間本身的性質。字碼點 32 位於 33–126 旋轉範圍之外,因此字與字之間的空白始終保持可見。定位字元與換行字元落在更遠的範圍之外,也保持不變。非 ASCII 字元是遠高於 126 的字碼點,正確的實作會原封不動地複製它們,而不是將其正規化或拆成 UTF-16 半段。
三種做法的差異在於實際上能多可靠地保留這些字元。對個別字元進行手動算術運算只有在你有意識地將非 ASCII 內容複製過去時才會保留它們。腳本必須明確地逐一處理 Unicode 字碼點並檢查 33–126 區間,因為天真的位元組層級迴圈可能會破壞多位元組序列。圍繞 Unicode 字碼點逐一處理模式打造的瀏覽器工具,憑藉設計就能正確處理非 ASCII 字元。如果複製出來的 ROT47 結果無法往返還原回原始文字,最常見的元凶是某個中介環節跳脫了標點、將智慧引號轉為直引號、變更了換行格式,或在傳輸過程中移除了非 ASCII 位元組。
ROT47 何時是合適的工具,何時不適用
ROT47 是一種謎題編碼,而非加密。它沒有秘密金鑰,任何認出該模式的人都能立即再次套用該運算將其反轉。它不提供機密性、完整性、身份驗證或對頻率分析的抵抗力;如果你的目標是保密訊息,那它完全是用錯工具。
ROT47 表現良好的情境:
- 在論壇上進行輕度的劇透遮罩,且其他讀者都認識該模式。
- 課堂上展示替換式密碼與模組運算。
- 在文字中進行可逆的謎題編碼,使其無法一眼讀懂。
- 測試下游流程如何處理旋轉後的標點與數字。
- 快速、暫時的混淆,可透過將結果貼回同一欄位在幾秒內還原。
ROT47 有風險的情境:
- 保護憑證、個人資訊或任何敏感訊息。
- 打算直接貼入 URL、HTML 屬性、shell 指令或正規表達式的輸出。由於標點會被旋轉,結果可能包含在這些情境中具有特殊意義的字元,因此需要進行跳脫。
- 任何你需要確保只有預期接收者能讀取訊息的情境。
轉換後驗證你的結果
將結果從編碼解碼器複製出來後,請將其再次貼到同一個輸入欄位,並再次套用該運算。若結果與原始文字完全一致,則表示往返還原成功。如果看起來有問題,請檢查是否有中介環節將智慧引號轉為直引號、在 Windows 與 Unix 之間變更換行格式、在複製過程中丟失了非 ASCII 位元組,或從剪貼簿或編輯器中移除了諸如零寬空白的隱藏字元。一篇專門探討如何在使用 ROT47 編碼解碼器後檢查結果的後續文章將更詳細地說明這些檢查步驟。
隨工具一起提供的八個固定範例固件涵蓋了文字、混合大小寫、數字、標點、空白、帶腔音字元與表情符號,每一個都會在兩個方向上進行檢查。你可以將它們作為健全性檢查,確認你正在使用的實作會產生你所預期的相同輸出,並確認自反性質在每個受支援的字元類別中皆成立。