Hill 密碼解碼器透過將反向金鑰矩陣套用至每對密文字母(模 26),反轉 Lester Hill 於 1929 年發明的 2×2 矩陣密碼。每個字母會先對應到一個介於 A=0 到 Z=25 的數字,接著字母會被分組成兩個一組的欄向量。解碼器會將每個向量乘以 K⁻¹(加密金鑰的模反元素),再將各分量模 26 化簡,以還原原本的數字對,然後再轉回 A–Z 字母。由於此密碼是以字母對而非單一字母為單位進行運算,因此每個標準化的密文區塊必須剛好包含兩個字母;任何長度為奇數的明文會在加密前自動以單個 X 進行填充。解碼器在還原過程中會保留該填充,而不會去猜測結尾的 X 是否為真實字母;當真實訊息恰好以密碼用於填補奇數長度的同一個字母作結時,這點就至關重要。

本說明會逐步介紹此密碼背後的數學原理、會改變結果的慣例,以及在信任其處理較長練習題之前,該如何將一組已知配對實際跑過 Hill Cipher Decoder 的完整步驟。

hill cipher decoder explained
Hill 密碼解碼器詳解:數學原理如何運作

Hill 密碼解碼器實際上做了什麼

Hill 密碼是一種以線性代數為基礎的多字母替代密碼。它不像 Caesar 或 Vigenère 那樣對單一字母進行位移,而是將一個 2×2 的金鑰矩陣 K 乘以一個包含兩個字母數字的欄向量來加密字母對,接著將每個結果模 26 化簡。解密則是其反向過程:解碼器會計算 K 的模反元素,將每個密文向量乘以該反元素,再進行一次模 26 化簡。

實際上的意義是:對於列為 a、b 與 c、d 的金鑰,以及寫成欄向量 [x; y] 的明文對,加密後的配對為 [a·x + b·y; c·x + d·y],各分量均模 26 化簡。解碼器會將密文向量乘以反向矩陣(亦為模 26)來解出原始的 [x; y]。若你輸入錯誤的金鑰,就會得到錯誤的結果;只有在金鑰擁有有效的模反元素時,數學運算才是可逆的。

此密碼是第一個實用的多字母替代方案,在 1929 年確實是一項重大進展,但字母數量少、區塊大小固定,因此它無法像經過認證的現代加密那樣隱藏模式。

用白話解釋的模 26 矩陣數學

模算術會將數字環繞在一個固定的範圍內。模 26 意味著重複減去 26,直到結果落在 0 到 25 之間,因此 33 會變成 7,而 78 會變成 0。每一次 Hill 密碼的運算最終都會進行模 26 化簡,讓結果可以對應回字母。

金鑰矩陣 K 由四個整數組成,排列成兩列。其行列式為 a·d − b·c。為了讓矩陣在模 26 下可逆,該行列式必須與 26 互質,這等同於 gcd(det(K), 26) = 1。由於 26 的唯一質因數為 2 與 13,任何偶數或是 13 的倍數的行列式都沒有模反元素,解碼器也無法唯一還原每個明文對。這正是為什麼某些金鑰會被直接拒絕,而非回傳誤導性的結果。

反矩陣本身是由伴隨矩陣所構成。對於 K = [a b; c d],其伴隨矩陣為 [d −b; −c a]。將伴隨矩陣乘以行列式的模反元素,再將各項模 26 化簡,所得即為 K⁻¹。解碼器會在背景執行此運算,並使用其結果來解密每個雙字母區塊。

為了用具體例子讓數學更清楚,我們採用預設金鑰 3 3; 2 5 與明文對 HE,其中 H=7、E=4。加密後的配對為 [3·7 + 3·4; 2·7 + 5·4] = [33; 34],模 26 化簡後得到 [7; 8] = HI。下一對明文 LP(L=11、P=15)會加密為 [3·11 + 3·15; 2·11 + 5·15] = [78; 97],模 26 化簡後為 [0; 19] = AT。合併起來,HELP 就變成 HIAT,這與該工具在此慣例下產生的結果相同。

會改變輸出結果的慣例

Hill 密碼已被重新實作過無數次,因此相同的可見數字會因慣例不同而產生不同的密文。Hill Cipher Decoder 會明確記載其選擇,讓你可以將結果與教科書或其他工具進行比對。

慣例本頁常見替代方案
字母對應數字A=0 到 Z=25A=1 到 Z=26
向量方向欄向量 [x; y]列向量 [x y]
區塊大小兩個字母三個或更多字母
奇數長度明文的填充單個結尾 X不填充,或使用不同填充字元
金鑰輸入順序以分號分隔各列扁平清單或不同的分組方式

若有不同參考資料將字母置於列向量而非欄向量中,即使金鑰數字看起來相同,相乘順序也會反轉,密文也會跟著改變。重新排列金鑰的列或行也會產生同樣的結果。在比對結果之前,請務必檢查字母對應、向量方向、區塊大小與填充規則,因為幾乎所有不一致的情況都代表的是慣例差異,而非計算錯誤。

如何使用 Hill Cipher Decoder

  1. 確認練習題使用的是 A=0 到 Z=25、雙字母欄向量,以及為奇數長度明文填充 X。若教科書採用不同規則,請先加以對齊,否則輸出結果將無法相符。
  2. 將矩陣的兩列以分號分隔的四個整數輸入,例如 3 3; 2 5。負值或超出範圍的值會被標準化為 0 到 25,而任何行列式與 26 不互質的金鑰都會以明確的錯誤訊息遭到拒絕。
  3. 選擇要加密或解密,然後貼上你的 A–Z 訊息或密文。該工具會在處理前移除空格、標點、數字與大小寫,因此標準化後僅會留下 A–Z 的字母。
  4. 執行轉換。加密時,若標準化後的明文長度為奇數,會以單個 X 進行填充;解密時則會完全保留還原結果(包括任何結尾的 X),因此無法判斷最後的 X 是填充字元還是真正的字元。
  5. 在依賴較長的輸出之前,請先用預設金鑰 3 3; 2 5 將 HELP 與 HIAT 等已知配對進行比對。若測試配對相符,代表慣例、金鑰與算術皆已對齊,後續練習也應能順利進行。

輸入上限為 100,000 個字母;空白的標準化輸入、長度為奇數的密文或過大的訊息都會被拒絕,而非靜默地截斷。輸出僅限大寫 A–Z,原本的大小寫、標點與空格皆已移除。若練習題需要還原原始詞彙,請另行保留一份原始訊息副本,因為標準化無法還原這些內容。

為何部分金鑰會被拒絕

解碼器會拒絕任何行列式與 26 有共同因數的金鑰。具體而言,這排除了偶數或可被 13 整除的行列式,因為沒有任何整數乘以這類行列式後能化簡為模 26 的 1。若無模反元素,多個明文對可能對應到相同的密文對,解碼器也無法從中選出正確答案。拒絕該金鑰才是最誠實的回應。

被接受的金鑰仍會直接在頁面上顯示其底層矩陣。對學習來說這沒問題,因為數學過程保持透明,但這也意味著任何能操作此工具的人,都能解密以他們所見金鑰加密的任何訊息。此介面刻意保持透明而非依賴保密,而可見的金鑰正是課堂練習得以進行的關鍵。

限制、填充邊緣情況與安全性

輸入字元解碼器的處理方式
A–Z 字母直接用於矩陣運算
a–z 字母在處理前轉為大寫 A–Z
空格在處理前移除
標點與數字在處理前移除
變音符號或非 ASCII移除,且不會在輸出中呈現
解密後結尾的 X原樣保留,永不自動去除

若原始訊息確實以 X 結尾,解密過程無法將該字元與填充字元區分開來。在受控的練習中,請記錄原始明文長度,以便確認已知的結尾 X;否則請將還原出的 X 保留原位,而非自動刪除。相同的注意事項也適用於訊息的開頭與中間,因為此密碼無法標示填充位置,且任何標準化都是不可回復的。

若讀者希望逐步看完整個反向矩陣的運算過程(一次一對),位於 如何使用具體範例解密 Hill 密碼 的指南可與本說明相互搭配閱讀。

此密碼在歷史上具有重要意義,因為它是第一個將線性代數實際應用於密碼學的多字母替代方案,但它在現代並不安全。字母數量少、區塊大小固定,且已知明文會揭露定義金鑰的線性關係。請勿將 Hill 密碼用於密碼、權杖、個人資訊、檔案或任何實際通訊。若需要真正的機密性,請使用經過審核的認證加密機制,例如 AES-GCM,它能同時保護機密性與完整性,並受到所有現代密碼學程式庫支援。

若你正在權衡各種選項,Rail Fence 密碼解碼器詳解:鋸齒狀反轉 對此有詳細說明。