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

how do i compare approaches to use rot47 encoder decoder
比較使用 ROT47 編碼解碼器的各種做法

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

  1. 將你想轉換的確切文字貼到輸入欄位。空白、定位字元、換行字元,以及表情符號或帶腔音符字母等非 ASCII 字元都會原樣保留。
  2. 選擇「套用 ROT47」按鈕。工具會逐一檢視輸入中的每個 Unicode 字碼點,將 33 到 126 之間的可列印 ASCII 值旋轉 47 個位置,並在不修改的情況下複製該範圍以外的任何內容。
  3. 從輸出區域將產生的可列印 ASCII 替換結果複製到剪貼簿。
  4. 若要解碼,請將 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 編碼解碼器後檢查結果的後續文章將更詳細地說明這些檢查步驟。

隨工具一起提供的八個固定範例固件涵蓋了文字、混合大小寫、數字、標點、空白、帶腔音字元與表情符號,每一個都會在兩個方向上進行檢查。你可以將它們作為健全性檢查,確認你正在使用的實作會產生你所預期的相同輸出,並確認自反性質在每個受支援的字元類別中皆成立。

相關閱讀:ROT13 解碼器 Bash:瀏覽器作為 tr 指令的替代方案