若要解密 2x2 希爾密碼,請在模數 26 下,將每組密文對乘以 2x2 鑰匙矩陣的模逆矩陣,其中 A=0 到 Z=25。2x2 希爾密碼由 Lester Hill 於 1929 年提出,將每對明文字母視為一個由數字組成的欄向量,在將結果模 26 縮減之前,先對該向量套用鑰匙矩陣。解密過程即為反轉那單一步驟:求出鑰匙矩陣在模 26 下的逆矩陣,將其乘以每組密文對,再使用同一套 A 到 Z 的對應,將所得數字轉回字母。無論你是在做課本練習、處理作業題中取回的鑰匙,或是處理像 HELP 變成 HIAT 這種已知對,整個公式都是相同的。整個過程都在本機端透過 Hill Cipher Decoder 執行,因此你可以貼上密文、提供與加密時相同的 2x2 鑰匙、選擇解密,即可讀回解出的明文,完全不必手寫任何矩陣程式碼。

為何 2x2 希爾密碼可以被解密
希爾密碼將線性代數應用於多重字母替換法,將每塊 n 個字母加密為一次矩陣乘法。2x2 鑰匙是最小的非平凡情況,每次處理兩個字母。要使解密能以單一矩陣運算存在,鑰匙矩陣在模 26 下必須可逆,這表示每組密文對恰好對應唯一一組明文對。
可逆性的檢驗以行列式為基礎。對於鑰匙 K = [[a, b], [c, d]],其行列式為 ad - bc。要在模 26 下可逆,行列式必須與 26 互質,而 26 可分解為 2 x 13。這個條件寫成 gcd(ad - bc, 26) = 1。若行列式與 26 共享任何因數,就不存在唯一的模逆矩陣,且多組明文對可能加密為同一密文。大多數已發表的練習題所使用的鑰匙,其行列式都與 26 互質,因為課本需要解密能夠成功。Hill Cipher Decoder 中的預設鑰匙 [[3, 3], [2, 5]],其行列式為 9,與 26 互質,因此可逆。
解密數學:從密文對回到明文對
解密公式與加密公式互為鏡像。若加密對某兩個字母的欄向量計算 C = K × P (mod 26),則解密計算 P = K⁻¹ × C (mod 26)。模逆矩陣 K⁻¹ 分兩個步驟建立。
第一步,計算 K 的伴隨矩陣。對於 K = [[a, b], [c, d]],伴隨矩陣會交換對角線元素並將非對角線元素變號,得到 [[d, -b], [-c, a]]。第二步,求行列式的模逆元。行列式必須滿足 det × det⁻¹ ≡ 1 (mod 26),這個結果可由擴充歐幾里得演算法產生一個介於 0 到 25 的數,即使原始行列式為負值或大於 25。
最終的逆矩陣為 det⁻¹ 乘上伴隨矩陣,再模 26 縮減。一旦得到 K⁻¹,每組密文對 [x; y] 就變成 [[d, -b], [-c, a]] 乘上 [x; y] 再乘上 det⁻¹,全程模 26 縮減,即可得明文對。
| 行列式 | 與 26 的 gcd | 在 mod 26 下是否可逆? |
|---|---|---|
| 1, 3, 5, 7, 9, 11, 15, 17, 19, 21, 23, 25 | 1 | 是 |
| 2, 4, 6, 8, 10, 12, 14, 18, 20, 22, 24 | 2 | 否 |
| 13, 26, 39 | 13 | 否 |
若鑰匙的行列式落在第二列或第三列,則無法唯一解密任何密文,Hill Cipher Decoder 會直接拒絕,而不是回傳誤導性的文字。
逐步解密 2x2 希爾密碼
- 確認你練習題所使用的約定。檢查對應方式為 A=0 到 Z=25、區塊大小為 2,且只有在正規化後長度為奇數時,才以單一個 X 進行填充。Hill Cipher Decoder 在同一頁面中記錄了此約定。
- 以兩列(以分號分隔)輸入四個矩陣元素,例如 3 3; 2 5。僅接受整數;元素會被正規化為 0 到 25。
- 選擇解密作為運算。若在此處選成加密,會把你的密文變成一段與原訊息在數學上毫無關聯的第三個字串。
- 將密文貼入輸入欄位。工具會先移除空格、標點、數字與換行,再將字母兩兩分組。
- 執行轉換並讀取結果。輸出僅包含大寫 A-Z 字元。
- 在信任較長的輸出之前,先以一組已知對進行測試。預設鑰匙 3 3; 2 5 在此約定下會將 HELP 變成 HIAT,因此將 HIAT 以同一把鑰匙送回解密,應該要得到 HELP。若來回測試失敗,表示約定不一致,較長的解密結果也不可信。
讀取輸出:填充、被移除的字元與長度
Hill Cipher Decoder 僅對正規化的 A-Z 文字進行運算。在矩陣乘法執行之前,所有空格、數字、標點、換行與附重音的字元都會被移除。即使原始訊息中含有這些顯示用字元,解出的明文也不會包含它們。
加密與解密的長度規則不同。明文可以是奇數長度,因為加密會附加一個 X 以填滿最後一對。相對地,密文必須是偶數長度,因為每個區塊本身就包含兩個值。若你的正規化密文長度為奇數,介面會直接拒絕。輸入上限為 100,000 個正規化後的字母,以保持互動流暢。
解密輸出尾端的 X 是刻意保留下來的。若自動移除,可能會誤刪原始訊息最後一個真的 X。如果你確認原始訊息並非以 X 結尾,請自行刪掉那個尾端字母。在受控的練習中,請記錄原始長度,使兩種情況之間的區別保持明確。
解密結果看起來錯誤的常見原因
解密幾乎總是因為以下四個原因之一而失敗,而這些全部都是約定不一致,而非算術錯誤。
| 約定 | Hill Cipher Decoder | 常見替代方案 |
|---|---|---|
| 字母對應 | A=0, B=1, ..., Z=25 | A=1, B=2, ..., Z=26 |
| 向量方向 | 欄向量 [x; y] | 列向量 [x, y] |
| 區塊大小 | 2 個字母 | 2 或 3 個字母 |
| 奇數長度的填充 | 一個尾端 X | 方式不一或無 |
最常見的不一致是字母對應。某些來源使用 A=1 到 Z=26,或使用 A=0 到 Z=25 並將 Z 對應至 25,而同一本課本裡可能兩種都出現。光是這個差異就會讓每個輸出字母位移,產生看似仍為 A-Z 文字的亂碼。
向量方向是第二個陷阱。本頁使用欄向量,因此一組明文對會變成 [[x], [y]],並由左側乘上鑰匙。其他參考資料則將字母放在列向量 [[x, y]] 中,從同一可見矩陣產生不同的密文。
區塊大小與填充規則會改變長度計算。2x2 密碼預期兩個字母為一區塊,並以 X 填充。3x3 密碼預期三個字母為一區塊,並使用不同的填充約定。將以某區塊大小產生的密文餵給另一種區塊大小,會產生仍然解密成 A-Z 字元的亂碼,因此若沒有一組已知對,這種錯誤很難察覺。
最後,是鑰匙本身。四個元素必須與加密時使用的四個元素完全一致,順序也必須相同。交換兩列、兩欄,或將矩陣轉置,都會改變密文,因為每個位置都會影響行列式。希爾密碼在歷史上具有重要性,因為它將線性代數應用於多重字母替換法,但它在現代機密性上並不安全,所以請勿將這些機制再用於密碼、權杖、個人資訊或正式訊息的保護。若想取得一個不必自己寫矩陣程式碼的平行逐步說明,請參閱如何在不手動計算的情況下解讀希爾密碼指南。
若想深入了解,請參閱如何使用已知鑰匙解讀 Vigenere 密碼。