ROT13

Posted by Adam on August 24, 2022
## 📌 核心知識 * **ROT13 特性**:ROT13 是一種對稱的字母替換加密(位移 13 位)。因為英文字母共 26 個,進行第二次 ROT13 處理即可還原成原本的內容。 * **指令缺失原因**:macOS / Linux 預設未提供名為 `rot13` 的獨立指令,需透過內建的 `tr` 工具來實現字元位移。 ## 🔸 類似概念 * **Base64**:用於將二進位資料(如 ZIP 檔)轉為純文字字串。 * **`tr` 指令位移對照**:`tr 'A-Za-z' 'N-ZA-Mn-za-m'` ## 📝 範例說明 ### 1. 加密與混淆(打包) 將 `vim.zip` 轉為 Base64 後進行 ROT13 混淆並寫入檔案: ```bash base64 -i vim.zip | tr 'A-Za-z' 'N-ZA-Mn-za-m' > backup_obfuscated.txt ``` ### 2. 解密與還原(解包) 讀取混淆檔,再次透過 ROT13 還原 Base64 字串,最後進行 Base64 解碼: ```bash cat backup_obfuscated.txt | tr 'A-Za-z' 'N-ZA-Mn-za-m' | base64 -d > vim_restored.zip ``` --- `tr 'A-Za-z' 'N-ZA-Mn-za-m'` 的作用是將輸入文字中的**每一個英文字母往後推移 13 個位置**。 ## 📌 核心知識 `tr` 是 Unix/Linux 系統中的「字元替換(translate)」指令。它的運作邏輯是**一對一對應替換**:第一個集合裡出現的第 $N$ 個字元,會被替換成第二個集合裡的第 $N$ 個字元。 * **`'A-Za-z'`**:代表「搜尋目標集合」,即所有大寫與小寫英文字母(A-Z 以及 a-z)。 * **`'N-ZA-Mn-za-m'`**:代表「替換目標集合」。它把字母順序改從 N 開頭,排到 Z 後接回 A 到 M(大寫與小寫皆同)。 ## 🔸 類似概念 這就像是在做一張「密碼對照表」: * **大寫字母對應**: * 原本:`A B C D ... M N O P ... Z` * 替換:`N O P Q ... Z A B C ... M` * **小寫字母對應**: * 原本:`a b c d ... m n o p ... z` * 替換:`n o p q ... z a b c ... m` 非英文字母的字元(例如數字、標點符號、換行符)因為不在第一個集合內,所以會**保持原樣不變**。 ## 📝 範例說明 若將字串 `"Hello"` 傳給這個指令: 1. **`H`** 在對照表中對應到 **`U`** 2. **`e`** 在對照表中對應到 **`r`** 3. **`l`** 在對照表中對應到 **`y`** 4. **`l`** 在對照表中對應到 **`y`** 5. **`o`** 在對照表中對應到 **`b`** 處理結果: ```bash echo "Hello" | tr 'A-Za-z' 'N-ZA-Mn-za-m' # 輸出結果為:Uryyb ```