若要解密凱薩密碼,請對訊息中的每個字母套用編碼位移的反向位移,並使用模運算:明文位置 = (密文位置 − 位移) mod 26。位移是一個介於 0 到 25 之間的整數,也就是當初用來編碼文字的同一個數字。每個 ASCII 大寫字母 A 到 Z 會在字母表中向後移動該數量的位置,當計數低於零時,從 A 繞回 Z,小寫字母 a 到 z 則獨立於大小寫遵循相同規則。位移 3 會把 K 變回 H、O 變回 L,將「KHOOR」還原成「HELLO」;位移 13(ROT13)會自我反轉,因為 13 正好是 26 的一半,所以連續套用兩次會產生原本的 ASCII 字母。數字、標點符號、空格、重音字元、表情符號,以及任何 26 個英文字母以外的書寫系統都會原封不動地保留,因此它們在輸出中會維持原本的位置。這個數學規則與 Python 的 for 迴圈搭配 chr 和 ord 所計算的結果完全相同,但它也可以直接在瀏覽器中執行,完全不需要撰寫任何程式碼。

how to decrypt caesar cipher in python
how to decrypt caesar cipher in python

凱薩密碼解密在數學上實際如何運作

凱薩密碼是一種替換式密碼,它會將英文字母表中的每個字母替換成往前固定位置數的字母,然後在末端繞回。解密只是反過來執行該替換:每個字母往後移動相同數量的位置,當即將超出字母表開頭時,從 A 繞到 Z。其簡潔的數學表示式為:

明文字母索引 = (密文字母索引 − 位移) mod 26

其中 A = 0,B = 1,…,Z = 25。由於字母表恰好有 26 個字母,模運算保證結果一定會落回 0–25 的範圍內。同一公式對小寫字母也適用,只要以小寫字母表作為其獨立的索引範圍即可。兩種大小寫互相獨立,因此已編碼的大寫字母在解碼後絕不會變成小寫,反之亦然。

計算範例:以位移 3 解碼字母 K。K 位於索引 10(A = 0,K = 10)。接著 10 − 3 = 7,而 7 mod 26 = 7。索引 7 對應字母 H,因此 K 解碼為 H。將位移 3 套用至完整詞組「KHOOR ZRUOG」時,每個字母往後移動三個位置並乾淨地繞回,產生「HELLO WORLD」。兩個字之間的空格會被保留,因為空格並非字母。

Python 如何實作相同的解密迴圈

在 Python 中,同樣的邏輯會以一個小迴圈呈現。經典實作會逐字元走訪,依 isupper() 或 islower() 分支判斷,使用 ord() 計算位移後的碼位,以 26 取模數,最後再用 chr() 重建字串。迴圈中的公式為 chr((ord(char) − base − shift) % 26 + base),其中 base 依大小寫為 ord('A') 或 ord('a')。任何不是 ASCII 字母的字元都會原封不動附加到結果中,這與本工具對數字、標點符號、重音字元、表情符號以及非拉丁文字的保留規則一致。

那種做法可行,但有一些實務上的限制,使得大多數讀者傾向使用瀏覽器工具。你必須把腳本複製到檔案中,無需額外安裝,執行後再把結果貼回你正在處理的內容。如果編碼訊息使用的位移與你猜測的不同,你就必須編輯腳本並重新執行。對於一次性的課堂範例或單一謎題線索而言,撰寫、儲存並執行 Python 的成本反而超過其效益,特別是當同樣的模運算邏輯已經可以透過單一點擊取得時。

如果你仍想詳細了解迴圈版本,無需手寫迴圈:在 Python 中解碼凱薩密碼 這篇教學展示了乾淨的實作,你可以貼到腳本或筆記型電腦中,與瀏覽器工具並列對照檢視。

使用凱薩密碼解碼器來解密凱薩密碼

若想要更快的做法,凱薩密碼解碼器 會直接在瀏覽器中套用上述一模一樣的模運算公式,無需檔案、無需安裝、無需上傳。文字從不離開頁面,因此你貼上的內容會保留在本機。使用它來解密凱薩密碼的步驟如下:

  1. 將密文貼到文字欄位中。換行、標點符號、重音字元以及任何非拉丁文字,請完全依照其在編碼訊息中的樣貌貼上。
  2. 選擇解碼模式,然後從 0 到 25 中選取已知的位移。如果你不知道位移,凱薩密碼只有 26 種可能性(含不變位移),而本頁面不會代你猜測。
  3. 點選轉換按鈕。結果會立即顯示,所有 ASCII 字母 A–Z 與 a–z 都會依所選位移向後移動,其他所有碼位則原封不動複製。
  4. 檢視輸出結果。更改來源文字、模式或位移會清除先前的結果,因此顯示的文字永遠會對應目前的設定。
  5. 當結果看起來正確時,使用複製控制項來複製解碼後的文字。若解碼結果毫無意義,代表位移錯誤或使用的是不同的密碼,工具並不會對此提出警告。

位移 0 是不變操作,因此以位移 0 進行編碼與解碼會原樣回傳輸入。位移 25 是位移 1 的反向操作,而位移 13(ROT13)則是自身的反函數,因為 13 + 13 = 26,模 26 後化簡為 0。常見位移的實用參考數值彙整如下。

位移常用名稱備註
0不變操作不進行轉換;輸出等於輸入
1凱撒原版最小的非平凡位移
3經典教科書範例常用於介紹此密碼
13ROT13自我反函數,因為 13 + 13 = 26 mod 26 = 0
25反向凱撒等同於以位移 1 反向進行編碼

哪些字元會被位移,哪些保持不變

凱薩密碼的範圍在設計上非常狹窄。只有 52 個 ASCII 碼位 A 到 Z 以及 a 到 z 會參與位移;其他所有字元都會依照其在輸入中的樣貌原封保留。下表彙整了相關行為,讓你在執行工具前就能預測輸出。

字元類型範例解密期間的行為
大寫 ASCII 字母K, Z, A向後位移 N 個位置,從 A 繞回 Z
小寫 ASCII 字母k, z, a向後位移 N 個位置,從 a 繞回 z
數字0–9完全保留
空格或換行(空格), \n完全保留
標點符號. , ! ? ' "完全保留
帶重音的拉丁字元é, ñ, ü完全保留
非拉丁文字日本語, عربي完全保留
表情符號🎉, ✓完全保留

這種狹窄的範圍是刻意的。帶重音的字母不會被轉寫成純 ASCII,混合語言的輸入保持可預測性,而大小寫會被獨立處理,因此大寫來源絕不會意外變成小寫。結果會保留換行,因此多行的編碼訊息會以相同結構解碼為多行明文。

為何凱薩密碼絕非安全工具

凱薩密碼只有恰好 26 種可能的位移,包括不產生變化的位移 0。攻擊者可以在毫秒內嘗試每一種選擇,即便不靠暴力破解,一般英文的字母頻率分布也會在幾個密文字內就洩漏最有可能的位移。本工具本身並無任何密碼學宣稱:它不執行任何密碼學操作、不持有任何秘密金鑰,也未提供任何機密性保證。「編碼」一詞描述的是字母的轉換,而非保護。

凡是真正需要安全性之處——密碼、復原碼、私訊、客戶資料、身份驗證權杖、財務細節——現代密碼學會使用經過審核的演算法,搭配秘密金鑰、認證加密以及嚴謹的金鑰管理。這些特性在單一字母表替換中一概不存在,不論位移看起來多大都一樣。請將凱薩密碼解碼器視為學習與解謎輔助工具:用於課堂示範、密室逃脫線索、地理藏寶提示、輕量級文字混淆,以及核對教科書中的計算範例。請勿將任何你不願留在咖啡店便利貼上的內容貼入其中。

如果底層問題根本不是字母替換,其他瀏覽器工具可以處理不同的編碼工作而不致混淆。Base64 編碼 / 解碼 工具負責位元安全傳輸編碼、摩斯密碼翻譯器 負責轉換點與劃、URL 編碼 / 解碼器 負責跳脫 URL 元件。這些工具都無法與凱薩密碼互換,也都無法單獨提供機密性。

想進一步了解,請參閱 如何在不遺失空格的情況下解碼欄柵密碼