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

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=25 | A=1 到 Z=26 |
| 向量方向 | 欄向量 [x; y] | 列向量 [x y] |
| 區塊大小 | 兩個字母 | 三個或更多字母 |
| 奇數長度明文的填充 | 單個結尾 X | 不填充,或使用不同填充字元 |
| 金鑰輸入順序 | 以分號分隔各列 | 扁平清單或不同的分組方式 |
若有不同參考資料將字母置於列向量而非欄向量中,即使金鑰數字看起來相同,相乘順序也會反轉,密文也會跟著改變。重新排列金鑰的列或行也會產生同樣的結果。在比對結果之前,請務必檢查字母對應、向量方向、區塊大小與填充規則,因為幾乎所有不一致的情況都代表的是慣例差異,而非計算錯誤。
如何使用 Hill Cipher Decoder
- 確認練習題使用的是 A=0 到 Z=25、雙字母欄向量,以及為奇數長度明文填充 X。若教科書採用不同規則,請先加以對齊,否則輸出結果將無法相符。
- 將矩陣的兩列以分號分隔的四個整數輸入,例如 3 3; 2 5。負值或超出範圍的值會被標準化為 0 到 25,而任何行列式與 26 不互質的金鑰都會以明確的錯誤訊息遭到拒絕。
- 選擇要加密或解密,然後貼上你的 A–Z 訊息或密文。該工具會在處理前移除空格、標點、數字與大小寫,因此標準化後僅會留下 A–Z 的字母。
- 執行轉換。加密時,若標準化後的明文長度為奇數,會以單個 X 進行填充;解密時則會完全保留還原結果(包括任何結尾的 X),因此無法判斷最後的 X 是填充字元還是真正的字元。
- 在依賴較長的輸出之前,請先用預設金鑰 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 密碼解碼器詳解:鋸齒狀反轉 對此有詳細說明。