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

how to decrypt 2x2 hill cipher
how to decrypt 2x2 hill cipher

為何 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, 251
2, 4, 6, 8, 10, 12, 14, 18, 20, 22, 242
13, 26, 3913

若鑰匙的行列式落在第二列或第三列,則無法唯一解密任何密文,Hill Cipher Decoder 會直接拒絕,而不是回傳誤導性的文字。

逐步解密 2x2 希爾密碼

  1. 確認你練習題所使用的約定。檢查對應方式為 A=0 到 Z=25、區塊大小為 2,且只有在正規化後長度為奇數時,才以單一個 X 進行填充。Hill Cipher Decoder 在同一頁面中記錄了此約定。
  2. 以兩列(以分號分隔)輸入四個矩陣元素,例如 3 3; 2 5。僅接受整數;元素會被正規化為 0 到 25。
  3. 選擇解密作為運算。若在此處選成加密,會把你的密文變成一段與原訊息在數學上毫無關聯的第三個字串。
  4. 將密文貼入輸入欄位。工具會先移除空格、標點、數字與換行,再將字母兩兩分組。
  5. 執行轉換並讀取結果。輸出僅包含大寫 A-Z 字元。
  6. 在信任較長的輸出之前,先以一組已知對進行測試。預設鑰匙 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=25A=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 密碼