鐵軌柵欄密碼解碼器的一個例子,從經典的 25 字字母片語 WEAREDISCOVEREDFLEEATONCE 開始,這個片語在歷史上的三軌 Z 字形換位會被重新排列為 WECRLTEERDSOEEFEAOCAIVDEN,同時不改變任何字碼點本身。鐵軌柵欄是一種換位密碼,而非替代密碼:它會將每個字元沿著固定數量的軌以對角線方式向下、再向上寫入,然後從上到下逐列讀取結果。使用三軌時,列的模式為 0, 1, 2, 1,並以 2(r−1) = 4 的循環長度重複,因此字元會落在頂軌的位置 0, 4, 8, 12, 16, 20 和 24,落在中軌的交替位置,以及落在底軌的位置 2, 6, 10, 14, 18 和 22。解碼只需要相同的軌數和相同的起始慣例——頂軌、無偏移、先向下——而鐵軌柵欄密碼解碼器預設就是採用這個慣例,因此上述標準密文和原始明文都會在您的瀏覽器中精確重現。

標準的三軌解碼器範例
片語 WEAREDISCOVEREDFLEEATONCE 是最常被重複使用的鐵軌柵欄密碼解碼器範例,因為它夠長,能清楚顯示 Z 字形,但又夠短,可以手動追蹤。將每個字元從 0 到 24 加上索引編號,在其上方放置列模式,密碼就會自己寫出來。
位置: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 字母: W E A R E D I S C O V E R E D F L E E A T O N C E 軌: 0 1 2 1 0 1 2 1 0 1 2 1 0 1 2 1 0 1 2 1 0 1 2 1 0
第 0 列擷取位置 0, 4, 8, 12, 16, 20 和 24,拼成 WECRLTE。 第 1 列擷取位置 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21 和 23,拼成 ERDSOEEFEAOC。 第 2 列擷取位置 2, 6, 10, 14, 18 和 22,拼成 AIVDEN。
依序串接這三列,先從頂軌開始,會產生 WECRLTE + ERDSOEEFEAOC + AIVDEN = WECRLTEERDSOEEFEAOCAIVDEN,也就是標準的三軌鐵軌柵欄密碼解碼器範例。由於演算法是完全確定性的,當您貼上 WEAREDISCOVEREDFLEEATONCE 並將軌數設為 3 時,鐵軌柵欄密碼解碼器會返回該精確字串;使用解密模式來回處理,就能逐字元還原原始明文。7 + 12 + 6 = 25 個字元,符合輸入長度,這是一個快速的健全性檢查,確認每個字碼點都已被計算在內,沒有任何字碼點被插入或遺漏。
如何在解碼器中重現這個範例
- 在瀏覽器中開啟鐵軌柵欄密碼解碼器頁面。
- 將模式切換為加密,讓工具將字元寫入 Z 字形,而不是重建 Z 字形。
- 在軌數欄位中輸入軌數 3。解碼器接受從 2 到 100 的任何整數,並會以明確的錯誤訊息拒絕分數或超出範圍的值。
- 將明文 WEAREDISCOVEREDFLEEATONCE 貼到輸入區。請完全按照您希望保留的方式,包含每個空格或換行;該工具會逐一處理 Unicode 字碼點,而不是去除非字母字元,因此您貼上的內容就是被編碼的內容。
- 點擊執行,從結果區塊讀取 WECRLTEERDSOEEFEAOCAIVDEN,並保留相同的空白格式。
- 若要確認來回處理的結果,請將模式切換為解密,保持軌數為 3,將密文貼回,點擊執行,並將輸出與原始明文進行比對。相同的輸出只能證實慣例,並不能證實機密性。
依軌數的軌模式
軌數決定了列的順序和循環長度。對於任何軌數 r,循環長度為 2(r−1),相同的模式會在整段訊息中重複。鐵軌柵欄密碼解碼器支援 2 到 100 軌。
| 軌數 | 循環長度 2(r−1) | 一個循環的列順序 |
|---|---|---|
| 2 | 2 | 0, 1, 0, 1, … |
| 3 | 4 | 0, 1, 2, 1, 0, 1, 2, 1, … |
| 4 | 6 | 0, 1, 2, 3, 2, 1, 0, 1, 2, 3, 2, 1, … |
| 5 | 8 | 0, 1, 2, 3, 4, 3, 2, 1, 0, 1, 2, 3, 4, 3, 2, 1, … |
讀取相同的列順序正是讓密文得以辨識的原因:第 0 列收集索引可被 4 整除的位置,第 2 列收集索引為 2 mod 4 的位置,第 1 列則收集其餘位置。當軌數等於或超過字元數時,每個使用到的位置都落在不同的初始下降段,因此輸出會逐字元等於輸入。由於轉換是確定性的,在鐵軌柵欄密碼解碼器中,相同的輸入和軌數總是會產生相同的輸出,這就是為什麼頁面上的八個黃金測試案例可以在沒有容差的情況下,為每個情境斷言出精確的密文。
嘗試四軌解碼器範例
提高軌數只會改變循環長度和列順序;它永遠不會改變出現的字元。使用四軌時,循環長度會從 4 增加到 6,列順序變為 0, 1, 2, 3, 2, 1。因此相同的 25 字字母片語會落在第 0 列的位置 0, 6, 12, 18 和 24,落在第 3 列的位置 3, 9, 15 和 21,以及落在第 1 列和第 2 列的交替位置。在鐵軌柵欄密碼解碼器中將軌數設為 4 並貼上相同的明文,會產生不同的 25 字元密文;切換回解密模式並使用相同的軌數,即可精確還原原始片語。將軌數進一步提高到最多 100,即可重現任何公佈其軌數的謎題,而該頁面隨附的八個黃金測試案例涵蓋了 2、3 和 4 軌,以及一段字母片語、數字、空格、標點符號和補充 Unicode,讓您可以在信任任何輸出之前先驗證慣例。
解碼器範例中的 Unicode 與標點符號
鐵軌柵欄密碼解碼器會將大小寫字母、數字、空白、標點符號和表情符號保留為個別的 Unicode 字碼點。因此,一個包含非 ASCII 字元的鐵軌柵欄密碼解碼器範例,是確認該工具不會悄悄丟棄位元組的有用檢查。像 👋 這樣的表情符號算是一個單一的補充字碼點,該工具絕不會將其拆成兩個 UTF-16 代理半字,因此一段包含表情符號、空格和標點符號的片語,會重新排列每個字碼點——包括空格和表情符號——而不會遺漏任何東西。複製動作會寫入結果區塊所顯示的確切字串,包括所有換行,且介面會在結果區塊內保留可見的格式,讓您在將密文貼回解密模式之前,可以確認空白已被保留。
當兩個鐵軌柵欄工具給出不同輸出時
鐵軌柵欄演算法有幾種常見的變體,而鐵軌柵欄密碼解碼器範例可能會根據工具實作的變體,返回不同的密文。鐵軌柵欄密碼解碼器使用固定的慣例——頂軌、無偏移、先向下、保留每個字碼點——並透過八個黃金測試案例將該行為鎖定。其他實作可能會去除非字母字元、從循環中間開始、從底軌開始,或先向上移動,而像dCode 鐵軌柵欄頁面這類參考資料,則記錄了其中一些變體以供比較。關於匹配慣例的指南將逐步說明如何在信任任何輸出之前協調不一致的情況。
| 慣例 | 本工具 | 常見變體 |
|---|---|---|
| 起始軌 | 頂軌 (0) | 有時是底軌 |
| 初始偏移 | 無 | 可能從循環中間開始 |
| 第一個方向 | 向下 | 有時向上 |
| 非字母字元處理 | 保留每個字碼點 | 通常在編碼前去除 |
| 大小寫敏感度 | 保留 | 有時標準化為大寫 |
| 表情符號處理 | 算作一個字碼點 | 可能會拆成代理半字 |
當兩個工具產生分歧時,最安全的協調方式是先確認慣例,然後在相符的軌數和起始位置下重新加密。鐵軌柵欄密碼解碼器中的解密功能絕不會猜測軌數,因為猜測屬於另一個獨立的密碼分析步驟。成功的來回處理只能證實慣例;鐵軌柵欄是一種歷史教學密碼,其祕密不過是少量的軌數,它會保留字元頻率,並且容易被暴力破解,因此不應用於憑證、權杖、檔案或任何機密通訊。
如果您正在權衡選項,線上 ROT13 解碼器:一款 CyberChef 風格的瀏覽器工具對此有詳細說明。