4 軌柵欄密碼解碼器會重建一段被沿著四個對角線書寫、再依序讀回各行而打亂的文字。四列的軌模式為 0, 1, 2, 3, 2, 1,然後重複,在鋸齒重新開始前構成一個完整的六個位置週期。解碼時,工具會統計每條軌各有多少字元,將密文切成對應的四個分區,並依原始訊息的每個位置從正確的軌取用一個字元。當兩個方向使用相同的軌數與慣例時,原始順序會被精確還原。Rail Fence Cipher Decoder 在你的瀏覽器中本機執行整個還原流程,因此明文從不離開裝置,週期計算也無需對軌數進行任何猜測。

Rail Fence 是一種換位密碼,屬於包含天竿棒 (scytale) 與欄位式 (columnar) 路線的同一家族。除了軌數之外,它沒有任何秘密。接收端要反轉鋸齒所需的唯一資訊,就是發送端所使用的同一個軌數,而像 2、3、4 或 5 這種小數字用手就能輕易嘗試。這使得 Rail Fence 成為講解以位置為基礎的換位概念絕佳教材,卻不適合用於任何真實世界的機密性需求,本頁接近尾聲的章節會直接討論這一點。

4 rail fence cipher decoder
4 rail fence cipher decoder

4 軌鋸齒的週期為六

每一種 Rail Fence 設定都由一個重複的列模式描述。對於 r 條軌,該模式為序列 0, 1, 2, …, r−1, r−2, …, 2, 1。對於四條軌,它變成 0, 1, 2, 3, 2, 1,週期長度為 2·(r−1),結果就是六個位置。在第六個字元之後,列計數器重設為 0,下降重新開始。

一段短訊息沿四軌鋸齒向下書寫的版面配置,標示出原始位置編號:

  • 第 0 列(最上方):原始位置 0, 6, 12, 18, …
  • 第 1 列:位置 1, 5, 7, 11, 13, 17, …
  • 第 2 列:位置 2, 4, 8, 10, 14, 16, …
  • 第 3 列(最下方):位置 3, 9, 15, 21, …

正是這種結構讓解碼成為確定性的過程。給定密文與軌數,解碼器可以精確計算每列各有多少字元,依比例切分密文,然後沿著同一條鋸齒將每個字元放回原本的位置。它不會發明任何填補,也不會猜測列數:列的大小由軌數與訊息長度強制決定。

如何在瀏覽器中解碼 4 軌柵欄密碼

  1. 開啟 Rail Fence Cipher Decoder 頁面,並選擇 Decrypt 作為模式。
  2. 在 rails 欄位中輸入 4。工具會驗證該值為介於 2 到 100 之間的整數;4 完全落在該範圍內。
  3. 將密文原封不動地貼入輸入框。請保留所有空格、句號、逗號、換行與表情符號,因為每一個都會被視為參與鋸齒的獨立碼點。
  4. 點擊 Run。解碼器會在內部統計輸入中落在四條軌上的位置數,將密文切成大小正確的四個列分區,並為原始訊息的每個位置從對應分區取用一個字元。
  5. 從輸出區塊複製結果,不要修剪空白;若要讓對話往返順暢,請使用相同的軌數來回覆。
  6. 若明文看起來仍然雜亂,請再次確認你使用了 4 條軌、發送端是從最上方軌開始且沒有偏移,以及密文在送到你這裡之前沒有被去除空格。慣例不同,是兩個 Rail Fence 工具對同一密文產生不同結果的最常見原因。

一個 4 軌實作範例:ABCDEFGHIJKL

取這段十二個字元的訊息 ABCDEFGHIJKL,沿著四軌鋸向下書寫,並標示每一列:

  • 第 0 列:A _ _ _ _ _ G _ _ _ _
  • 第 1 列:_ B _ _ _ F _ H _ _ L
  • 第 2 列:_ _ C _ E _ _ _ I _ K _
  • 第 3 列:_ _ _ D _ _ _ _ _ J _

加密時由左至右讀取第 0 列,再讀第 1 列,接著第 2 列,然後第 3 列,並將它們串接起來。第 0 列得到 A + G = AG,第 1 列得到 B + F + H + L = BFLH,第 2 列得到 C + E + I + K = CEIK,第 3 列得到 D + J = DJ。完整密文為 AGBFLHCEIKDJ,依然是十二個字元。

現在以四條軌對 AGBFLHCEIKDJ 執行解碼器。第一步在十二個位置上模擬鋸齒,以統計四個軌的大小,得到 2 + 4 + 4 + 2。密文依序切成這四個分區:AGBFLHCEIKDJ。接著解碼器依序走訪位置 0 到 11,查出每個位置所屬的列 (0, 1, 2, 3, 2, 1, 0, 1, 2, 3, 2, 1),並從對應分區的開頭取出一個字元:

  • 位置 0,第 0 列 → A from AG
  • 位置 1,第 1 列 → B from BFLH
  • 位置 2,第 2 列 → C from CEIK
  • 位置 3,第 3 列 → D from DJ
  • 位置 4,第 2 列 → E from CEIK
  • 位置 5,第 1 列 → F from BFLH
  • 位置 6,第 0 列 → G from AG
  • 位置 7,第 1 列 → H from BFLH
  • 位置 8,第 2 列 → I from CEIK
  • 位置 9,第 3 列 → J from DJ
  • 位置 10,第 2 列 → K from CEIK
  • 位置 11,第 1 列 → L from BFLH

還原後的明文為 ABCDEFGHIJKL,逐字元與原始訊息相符。這次往返僅能證明兩端的慣例一致;它無法告訴你任何關於機密性的事。

為什麼兩個 4 軌解碼器可能產生不同結果

若你將同一段密文貼到另一個 Rail Fence 工具中,卻得到不同的明文,最可能的原因是慣例差異而非錯誤。Rail Fence Cipher Decoder 採用最標準的慣例:沒有初始偏移、從最上方軌開始、先向下移動,並完整保留每個碼點。其他實作可能會去除空格與標點、從最下方軌開始、反向移動,或是在第一個字元之前施加一個偏移來移動列計數器。即使僅僅一個位置的偏移,也會打亂後續所有列的指派,使輸出與無偏移的結果看起來完全無關。

由於軌數是唯一的秘密,任何擁有候選密文與 Rail Fence 解碼器的人,都能用手依次嘗試 2、3、4、5 等等。Rail Fence Cipher Decoder 刻意不替你猜測軌數;它要求你明確指定,並將任何落在 2 到 100 範圍之外的值視為獨立的錯誤予以拒絕,而非靜默地採用預設值。如果一道題目預期你自行找出軌數,請將其視為一個獨立的密碼分析步驟。將輸出與其他參考實作(例如 dCode Rail Fence 頁面)進行比對,是找出慣例不一致的實用方法。

想進一步了解如何讓發送端與接收端之間的慣例對齊,請參 如何解讀 Rail Fence 密碼:對齊慣例

軌數一覽

任何軌數 r 的週期長度皆精確為 2·(r−1)。下表彙整了老師或題目最常設定的軌數之週期。較大的軌數週期較長,因此需要更長的訊息才會讓鋸齒模式重複。

軌數列模式(一個週期)週期長度出現場景
20, 12最簡單的換位;等同於每隔一個字元取一個。
30, 1, 2, 14經典的教學範例,包含廣為人知的 WEAREDISCOVEREDFLEEATONCE 片語。
40, 1, 2, 3, 2, 16常見於課堂練習與線上題目,也是本頁的重點。
50, 1, 2, 3, 4, 3, 2, 18複雜度足以讓暴力破解多花幾步。
60, 1, 2, 3, 4, 5, 4, 3, 2, 110常用於初階密碼學課程中介紹可變動的軌數。
7 以上模式對稱增長2·(r−1)解碼器支援至多 100 條軌,但多見於進階題目。

請記得軌數必須是介於 2 到 100 之間的整數,而輸入上限為 200,000 個碼點,以維持列建構的流暢。超過此長度的輸入應在解碼前先分割或簡化。

Rail Fence 是教學用密碼,而非真正的安全性

Rail Fence 不會改變任何字元,它只是重新排列它們,這意味著明文中每個字母的頻率會原封不動地保留在密文中。光是這個特性,就足以讓密碼分析師在字元直方圖與英文(或其他已知語言)吻合的瞬間,確認一份候選明文。結合最多 99 種軌數這種可暴力破解的密鑰空間,Rail Fence 幾乎不提供任何機密性。

Rail Fence Cipher Decoder 是為了學習、解題、課堂示範,以及重建已知軌數的歷史密文而打造的。它並不適用於憑證、個人資料、權杖、檔案,或任何需要保持私密的其他通訊。在這些情境下,經過審查的認證加密構造(例如 AES-GCM)才是合適的工具,而 Rail Fence 解碼器應保留其教學用途。

即使在教學情境中,也值得記住此密碼的確定性本質:相同的輸入與軌數必定產生相同的輸出;而一次成功的加密/解密往返,僅能證明慣例相互吻合,並不能證明訊息本身是秘密的。將該往返視為機密性的證明,是古典密碼學學習中最常見的初學者錯誤之一。

若你正在權衡各種選項,ROT13 解碼器 API 替代方案:在瀏覽器中本機執行 對此有詳細說明。