維吉尼亞密碼是一種重複金鑰的多字母替代密碼,它會將每個 ASCII 字母 A–Z(以及 a–z)依據下一個金鑰字母的數值(A=0、B=1、…、Z=25)在字母表中向前位移,並以 26 為模數進行環繞;至於其他所有字元(空格、標點、數字、表情符號、變音符號)則原封不動地複製。加密是加上位移,解密則是減去位移;在同一把金鑰下,這兩個操作互為精確的反函數,因此只要已知金鑰,初學者只需對每個字母做一次減法即可還原明文。金鑰會在訊息長度超過金鑰長度時從頭重新循環,所以一把五個字母的金鑰套用於五十個字母的訊息時,會以相同的五個位移循環十次。在此工具的慣例中,只有 ASCII 字母會消耗金鑰位置,這代表兩個單字之間的空格不會吃掉一個金鑰字母——下一個 ASCII 字母仍然會使用循環中的下一個位移。這就是免費的 維吉尼亞密碼解碼器 所採用的慣例,整個過程無需上傳任何文字或金鑰,因此在保持相同輸入與金鑰結果一致的情況下,操作仍然維持私密。

vigenere cipher decoder for beginners
初學者的維吉尼亞密碼解碼器:學習基本概念

維吉尼亞密碼究竟是什麼

維吉尼亞密碼是一種 16 世紀的方法,用於將可讀的文字(明文)轉換成不可讀的形式(密文),其使用的是一把簡短且會重複的金鑰字,而非單一固定的位移。金鑰字的每個字母會控制訊息下一個字母在字母表中被推移的距離;由於金鑰字含有多個字母,因此同一個明文字母根據其在訊息中所處的位置,可能會被加密成不同的密文字母。這就是「多字母」的核心概念:將許多不同的替代字母表堆疊在一起,並由金鑰進行循環切換。

對初學者來說,這個心智模型非常簡單。想像兩把尺:一把從左到右擺放訊息,另一把在其上方寫上金鑰字,必要時重複排列。在訊息的每個字母位置,你向下對應到正上方的金鑰字母,然後將訊息字母按該金鑰字母的數值進行位移。A 的位移為零(無變化)、B 為一、C 為二,依此類推,到 Z 為二十五。當到達 Z 時,請在字母表中環繞回頭。

模數位移的解釋,去除專業術語

每一步維吉尼亞運算背後的算術可寫成一行:

加密:密文數值 = (明文數值 + 金鑰位移) mod 26 解密:明文數值 = (密文數值 − 金鑰位移 + 26) mod 26

此處字母的數值範圍為 0–25,其中 A = 0、B = 1、…、Z = 25。解密公式中的「+26」只是為了確保在進行環繞之前,中間結果不會變成負數。產品的字母對應數值已透過測試鎖定,在使用工具之前,建議先記住一份簡短的表格,列出每個金鑰字母及其對應的位移值。

金鑰字母位移值
A0
B1
C2
D3
E4
F5
G6
H7
I8
J9
K10
L11
M12
N13
O14
P15
Q16
R17
S18
T19
U20
V21
W22
X23
Y24
Z25

加密和解密在使用同一把金鑰時互為精確的反操作,因此只要初學者知道金鑰,便能根據此表格與上述兩個公式,以手工方式反轉任何加密步驟。

如何使用維吉尼亞密碼解碼器工具

維吉尼亞密碼解碼器會直接在你目前的瀏覽器中套用規範的重複金鑰維吉尼亞轉換。請依照下列步驟,使用你已知的金鑰進行加密或解密。

  1. 將你的明文(用於加密)或密文(用於解密)貼到主要文字區域中。最多可接受 500,000 個 JavaScript UTF-16 程式碼單元;任何更長的內容會以整體方式被拒絕,並顯示明確的訊息,且不會顯示部分結果。
  2. 僅使用 ASCII 字母 A–Z(a–z 也能接受,會自動標準化為大寫)將你已知的金鑰字輸入金鑰欄位。金鑰長度必須介於 1 到 256 個字母之間,不得包含空格、數字、標點、變音符號或符號,也不能為空。輸入無效或空白的金鑰會直接產生錯誤,且不會輸出任何部分結果。
  3. 選擇模式:選擇「加密」將明文轉為密文,或選擇「解密」使用該金鑰從密文還原明文。本工具不會嘗試為你尋找或猜測金鑰。
  4. 點擊執行按鈕以套用轉換。輸出結果會依據所選模式標示為「密文」或「明文」,且只有 ASCII 字母會被轉換;每個空格、數字、標點符號、表情符號、帶變音符號的字元、CJK 字元以及換行符號,都會精確地保留在你原本放置的位置上。
  5. 使用複製按鈕取得標示好的輸出結果。當你編輯文字、金鑰或模式時,先前的輸出會立即被移除,使任何過時且不再相關的結果不會殘留在畫面上;「清除」按鈕則會同時清空文字、金鑰、輸出以及任何錯誤訊息。

整個操作完全在當前的瀏覽器分頁中本地執行。不會上傳任何文字、金鑰或結果,也不需要任何帳戶,因此你可以在不與遠端伺服器分享的情況下處理課堂範例或謎題線索。

初學者友善的實作範例(ATTACKATDAWN + LEMON)

經典的課堂範例使用明文 ATTACKATDAWN 搭配金鑰 LEMON。兩者皆為大寫 ASCII 字母,長度分別為 12 個與 5 個字母,而金鑰會重複以涵蓋整段訊息。僅將重複的金鑰與 ASCII 字母對齊,便可得到下表。

位置123456789101112
明文ATTACKATDAWN
金鑰(重複)LEMONLEMONLE
位移114121413114121413114

將每個位移以模數 26 加到字母數值上(A = 0、…、Z = 25),並環繞回對應的字母:

  • A(0) + 11 = 11 → L
  • T(19) + 4 = 23 → X
  • T(19) + 12 = 31 → 5 → F
  • A(0) + 14 = 14 → O
  • C(2) + 13 = 15 → P
  • K(10) + 11 = 21 → V
  • A(0) + 4 = 4 → E
  • T(19) + 12 = 31 → 5 → F
  • D(3) + 14 = 17 → R
  • A(0) + 13 = 13 → N
  • W(22) + 11 = 33 → 7 → H
  • N(13) + 4 = 17 → R

因此 ATTACKATDAWN 在 LEMON 金鑰下加密為 LXFOPVEFRNHR。這是記載於古典密碼學教材中的教科書範例,包含康乃爾大學 CS 1132 密碼習題集,以及 CrypTool 關於古典加密方法的教育簡報。若要以手工驗證反向還原,從每個密文字母中以模數 26 減去對應的位移,整個循環便會還原為 ATTACKATDAWN。

常見的初學者錯誤與迷思

初學者經常對維吉尼亞密碼抱持三個誤解,而這三點都會改變任何維吉尼亞實作的輸出結果,本工具也不例外。

第一,金鑰對齊。最常見的初學者陷阱是在空格、標點或換行之後錯誤地對齊金鑰。本工具所使用的標準慣例——也是多數教科書遵循的慣例——是只有 ASCII 字母會推進金鑰。兩個單字之間的空格不會吃掉一個金鑰字母;下一個 ASCII 字母會使用下一個位移。如果程式忽略此慣例,並在每個字元上都推進金鑰,則相同的明文與金鑰會產生截然不同的輸出,這正是為什麼在沒有同時約定對齊規則的情況下,交換金鑰是件危險的事。如需更深入了解空格、標點與大小寫如何影響每個字母對應的金鑰位移,請參閱我們的指南:在解讀維吉尼亞密碼時如何對齊金鑰,其中展示了同一段文字在不同慣例下的三種版本。

第二,金鑰的組成形式。金鑰不得為空,且只能包含 ASCII 字母 A–Z。大小寫會被忽略,因此 LEMON、Lemon 與 lemon 的行為完全相同。含有標點、數字、變音符號或符號的金鑰會直接被拒絕;解碼器不會進行修剪、合併或猜測原始字母。

第三,大小寫保留。小寫輸入會保持小寫,大寫輸入會保持大寫,解碼器絕不會將其一折疊為另一種形式。因此 "Attack At Dawn" 使用 LEMON 加密後會變成 "Lxfopv Ef Rnhr"(保留混合大小寫與原始空格),而非被攤平為單一的大寫字串。

最後一個值得釐清的迷思是:維吉尼亞密碼並非那種「無需金鑰就能還原隱藏訊息」的「解碼器」。此處的解密模式需要你一開始就提供正確的金鑰;該工具不會進行頻率分析、金鑰長度估算、字典搜尋、暴力破解或明文評分。如果你不知道金鑰,那麼你需要的根本是另一類完全不同的工具。

維吉尼亞密碼的適用情境(與不適用情境)

維吉尼亞密碼屬於教學與解謎用途的密碼。它非常適合用來說明模數算術、多字母替代、古典與現代密碼學的差異,以及在任何重複金鑰機制中金鑰對齊所扮演的角色。它同時也是逃脫遊戲線索、地理藏寶(Geocaching)謎題、課堂練習、休閒密碼學,以及在題目中已直接給出金鑰的搶旗賽(CTF)挑戰中的自然選擇。

它並不適合用於保護任何你不會寫在明信片上的內容。重複金鑰會洩漏統計結構,現代電腦能透過 Kasiski 檢定法與重合指數分析有效地破解古典維吉尼亞密碼,且該密碼對密文不提供任何完整性檢查。對於真正的安全需求——密碼、驗證 token、金融資訊、個人資料、機密訊息、正式營運機密,或任何一旦洩漏都會產生影響的資料——請使用具備認證加密功能與完善金鑰管理的現代加密系統。

對於第一類用途,維吉尼亞密碼解碼器能正確執行所有算術、完全在你的瀏覽器中運作,並對其輸出結果進行明確標示,使你隨時清楚自己看到的是密文還是明文。

如果你正在權衡各種選項,初學者的線上 XOR 加密:實用指南 對此有詳細的介紹。