若要解讀 Vigenere 密文,需使用原先用來打亂文字的同一個關鍵字,逐字元反向執行古典重複金鑰的算術運算。歷史上的 Vigenere 轉換會將 A 到 Z 對應到數值 0 到 25,並在加密時將目前金鑰字母的位移值加到每一個訊息字母上(模 26);解讀(解密)時則對每個 ASCII 字母減去相同的位移值,同樣採模 26 運算。大寫字母保持大寫,小寫字母保持小寫,任何不是 ASCII 字母的字元則原樣保留,因此空格、數字、標點、腔調符號及表情符號不會推進金鑰位置。當你提供的金鑰與加密時使用的金鑰相符時,結果就會是原始明文。使用 Vigenere 密文解碼器,這個解密過程會在本機於你的瀏覽器分頁中執行:貼上密文、提供已知的 A–Z 金鑰、選擇「解密」,即可讀取工具回傳的明文。不會上傳任何資料、不需要帳號,且對於相同的文字、金鑰與模式,結果是確定性的。

解讀 Vigenere 密文的意義
「解讀 Vigenere 密文」與「解密 Vigenere 密文」意思相同:取得由古典重複金鑰多重字母替換所產生的密文,並還原出背後的明文。Vigenere 密文不同於單一位移的 Caesar 密文,因為每個明文字母會以重複關鍵字中取出的一個不同位移量進行移位,這就是為何單一的頻率分析無法像破解 Caesar 那樣破解它。解讀時必須使用當初加密所使用的精確關鍵字。若沒有那個關鍵字,嚴格來說你並不是在「解讀」Vigenere 密文,而是在嘗試破解它——這是另一個不同的問題,而 Vigenere 密文解碼器並不會嘗試處理這類問題。
此解碼器實作了教科書中的 Vigenere:A 對應到 0、B 對應到 1、Z 對應到 25,金鑰字母則提供相同範圍的位移。加密時加上位移,解密時減去位移,兩者都以模 26 方式進位,因此 Z 減 A 會繞回 Z。當訊息中可參與運算的字母數量超過金鑰長度時,金會從頭重複。這等同於使用傳統 Vigenere 表格的算術運算,因此你可以套用你在密碼學課堂上學過的相同心智模型。
解碼前你需要準備的輸入
開始之前,請先集兩項資訊:
- 原樣的密文,包括所有空格、換行或標點符號。不要去除它們,因為它們會以相同的位置出現在明文中。
- 已知金鑰,僅使用 ASCII 字母 A 到 Z 撰寫。大小寫不限,但金鑰不得包含空格、數字、腔調符號或符號,長度必須介於 1 到 256 個字母之間。
若你沒有金鑰,此工具無法協助你解讀訊息。內建沒有解題模式、沒有頻率分析檢視、沒有金鑰長度估算,也沒有字典搜尋功能。Vigenere 密文解碼器僅是一款已知金鑰的工具。金鑰會在內部正規化,因此 LEMON、lemon 與 Lemon 會產生完全相同的位移;重要的是字母的精確序列。
逐步解碼 Vigenere 密文
- 開啟 Vigenere 密文解碼器,將密文貼入輸入欄位。上限為 500,000 個 UTF-16 字碼單元;超過上限的文字會整段被拒絕,而不會悄悄截斷。
- 在金鑰欄位中輸入已知金鑰,僅使用 ASCII 字母 A 到 Z,不含空格或符號,然後從模式選擇器中選擇「解密」。
- 執行轉換,使用輸出區域中標示明文的「複製」按鈕複製該明文,並保留精確的金鑰以便日後反查或驗證結果。
編輯輸入、金鑰或模式會立即清除先前的輸出與任何錯誤訊息,因此在你變更金鑰後,舊的錯誤金鑰密文不會殘留在畫面上。「清除」會一併移除文字、金鑰、輸出與錯誤。密文中所有非 ASCII 字母的字元——空格、換行、數字、標點、腔調符號、CJK 字元、表情符號——都會原樣複製過去,且不會消耗金鑰字母。
A–Z 的位移值如何對應到數字
解碼器對訊息字母與金鑰字母皆採用固定的 0 到 25 對應表。字母 A 代表零位移,B 代表一位移,Z 代表二十五位移。下表摘要說明每次加密與解密所使用的對應關係。
| 金鑰字母 | 位移 | 金鑰字母 | 位移 |
|---|---|---|---|
| A | 0 | N | 13 |
| B | 1 | O | 14 |
| C | 2 | P | 15 |
| D | 3 | Q | 16 |
| E | 4 | R | 17 |
| F | 5 | S | 18 |
| G | 6 | T | 19 |
| H | 7 | U | 20 |
| I | 8 | V | 21 |
| J | 9 | W | 22 |
| K | 10 | X | 23 |
| L | 11 | Y | 24 |
| M | 12 | Z | 25 |
加密時,解碼器會將位移加到目前的訊息字母;解密時則減去位移。兩者皆以模 26 進位,因此 Z 減 A 會得到 Z,A 減 B 也會得到 Z。
為何金鑰對齊慣例在解讀時很重要
不同的 Vigenere 程式處理非字母字元的方式不同,這個選擇會影響你解讀回來的明文。在本工具的慣例下,只有 ASCII 字母 A–Z 與 a–z 會消耗金鑰字母。所有其他字元——空格、數字、腔調符號、表情符號、標點、換行——都會原樣通過,而不會推進金鑰索引。
這個慣例在解讀訊息時會帶來兩個實際影響:
- 字母之間的標點會保留在原位。一個句號若夾在兩個字母之間,不會消耗金鑰字母,因此下一個 ASCII 字母仍會使用重複循環中的下一個位移。
- 原始明文中的空格會保留為空格。若寄件者排版時保留了空格,你會解讀出空格;若寄件者去除了空格,你會解讀出一整串不中斷的字串。
若加密時使用了不同的程式,且該程式會跨空格推進金鑰或對字元進行正規化,則同一組密文在相同金鑰下可能會產生不同的明文。請務必與寄件者確認對齊慣例,或兩種方式都試試看,並將結果與預期單字做比對。此慣例已透過介面中的測試固定下來,使用者無需猜測空格如何影響對齊。
一個實際演練的小範例:ATTACKATDAWN 搭配金鑰 LEMON
為了讓算術更具體,以下是使用金鑰 LEMON 的經典 11 字母範例。金鑰會重複以符合訊息長度:L-E-M-O-N-L-E-M-O-N-L。
加密(密文字母 = 明文字母 + 金鑰位移,mod 26):
- A (0) + L (11) = 11 → L
- T (19) + E (4) = 23 → X
- T (19) + M (12) = 31 mod 26 = 5 → F
- A (0) + O (14) = 14 → O
- C (2) + N (13) = 15 → P
- K (10) + L (11) = 21 → V
- A (0) + E (4) = 4 → E
- T (19) + M (12) = 31 mod 26 = 5 → F
- D (3) + O (14) = 17 → R
- A (0) + N (13) = 13 → N
- W (22) + L (11) = 33 mod 26 = 7 → H
密文:LXFOPVEFRNH。
解密時會以相同的 mod 26 進位方式反向減去相同的位移,完整還原 ATTACKATDAWN。將密文與 LEMON 金鑰貼到 Vigenere 密文解碼器中,並選擇「解密」即可驗證這個來回過程。金鑰不分大小寫,因此 lemon 與 LEMON 會產生相同的明文。
當解密輸出仍然讀不通時
若解讀回來的明文看起來仍然像亂碼,通常有以下四個原因:
- 金鑰錯誤。Vigenere 不會對「錯誤的金鑰」顯示錯誤訊息;解碼器會毫無異議地以你輸入的內容進行解密。金鑰中任何位置一個錯誤的字母,都會使其後所有字母在訊息剩餘部分全數錯亂。
- 對齊慣例不同。某些寄件者會跨空格推進金、去除腔調符號,或將大小寫合併處理。若無法聯絡寄件者,請試以不同的慣例重新解密。
- 非 ASCII 字母在加密前已被去除。帶有腔調的字母(é、ñ、ü)及其他 Unicode 字母皆超出 A–Z 的範圍。若寄件者手動將它們正規化為 ASCII,密文長度會比你預期的略短。
- 訊息中含有表情符號或多位元組字元。這些會原樣通過且不消耗金鑰字母,因此它們會以原本的位置出現在解密輸出中,即使一個輔助平面的表情符號會算成兩個 UTF-16 字碼單元。
只要編輯任何輸入,先前的輸出會立即被清除,因此在你變更金鑰後,工具絕不會讓舊的錯誤金鑰結果留下來。
解讀 Vigenere 密文不會做的事
此解碼器的功能刻意做得精簡。它不是 Vigenere 解題器、不是金鑰發現工具,也不是資安工具。它不會執行頻率分析、不會以 Kasiski 或 Friedman 測試估算金鑰長度、不會試字典候選字、不會對明文候選評分,也不會在輸出毫無意義時提出警告。它每次都套用相同的模運算,並信任你能提供正確的金鑰。
它同樣未實作 Vigenere 的變體。Autokey、Beaufort、變體 Beaufort、執行金鑰(run key)以及使用非英文字母的 tabula recta,皆超出其範圍。若你懷疑寄件者使用了其中之一,本工具便不適用。此解碼器同樣不支援位元組加密、Unicode 字母集或特定地區的字母摺疊規則。
最後,Vigenere 並非現代安全的加密方式。重複金的結構會洩漏可被電腦分析的統計模式,而短金鑰可以快速遭到暴力破解。請將 Vigenere 應用於學習模運算、課堂練習、密室逃脫線索及休閒解謎上。任何需要真正機密性的場合——密碼、認證權杖、財務資料、個人紀錄、產品機密——請使用具有驗證加密與完善金鑰管理的現代維護中加密系統,例如CrypTool 教育簡報等標準參考資料中所述者。此工具會依你選擇的操作將結果標示為密文或明文,但這些標籤描述的是轉換本身,並非對輸出具有意義、原創或安全性的保證。
若想進一步了解,請參線上執行 XOR 密文並選擇輸出格式。
若想進一步了解,請參閱什麼是密文?搭配 A1Z26 的白話指南。