要解密使用 2x2 金鑰的 Hill cipher,請將每對密文乘以該金鑰矩陣在模 26 下的模逆矩陣,然後使用 A=0, B=1, …, Z=25 將得到的數字對應回字母。以 3 3; 2 5 作為預設金鑰時,工具會把明文 HELP 加密成密文 HIAT;以同一把金鑰在解密模式下處理 HIAT 便會還原為 HELP,這是本文每個範例都依賴的健全性檢查。在處理更長的練習之前,這個來回驗證是最值得確認的一件事,因為大多數「答案錯誤」的回報其實來自字母對應、向量方向或填補規則的不一致,而非數學錯誤。下方頁面會逐步演示一次算術過程,再說明 Hill Cipher Decoder 如何自動套用相同慣例,讓你不必手動重做模逆運算即可確認練習配對。

how to decrypt hill cipher with example
how to decrypt hill cipher with example

Hill Cipher 解密究竟在做什麼

Hill cipher 是一種多字母替換式密碼:它以固定大小的區塊處理字母,而非一次處理一個。使用 2x2 金鑰矩陣時,每對明文字母會被視為一個行向量,乘以金鑰後取模 26 縮減,產生兩個密文字母。解密是該運算的代數反運算:將每對密文乘以金鑰矩陣的反矩陣,同樣取模 26 縮減,每對即可還原為原本的明文對。

只有在金鑰矩陣的行列式與 26 沒有共同因數時,反矩陣才會存在。26 的非平凡因數為 2、13 和 26,因此被禁止的行列式包括 2 或 13 的任何倍數,亦即 2、4、6、8、10、12、13、14、16、18、20、22、24 與 26。教科書中大部分的金鑰都能通過這項檢驗,這也是它們實際上能運作的原因。當條件不成立時,多組明文配對會對應到同一組密文配對,因此數學上不可能進行唯一解密。

範例演練:將 HIAT 還原為 HELP

使用預設金鑰 3 3; 2 5。依本頁慣例,HELP 會變成兩個行向量 (H, E) = (7, 4) 與 (L, P) = (11, 15)。將每對乘以金鑰得到 (7*3 + 4*3, 7*2 + 4*5) = (33, 34) 取模 26 縮減為 (7, 8) = HI,以及 (11*3 + 15*3, 11*2 + 15*5) = (78, 97) 取模 26 縮減為 (0, 19) = AT。因此對 HELP 加密會產生 HIAT。

要解密 HIAT,首先建構金鑰的反矩陣。行列式為 3*5 − 3*2 = 9,而 9 在模 26 下的模逆元素為 3,因為 9*3 = 27 ≡ 1 (mod 26)。金鑰的伴隨矩陣為 [[5, -3], [-2, 3]],因此反矩陣為 3 × [[5, -3], [-2, 3]] = [[15, -9], [-6, 9]],取模 26 縮減後得到 [[15, 17], [20, 9]]。

將此反矩陣套用於密文配對 (H, I) = (7, 8) 與 (A, T) = (0, 19):

  • 配對 (7, 8):(15*7 + 17*8, 20*7 + 9*8) = (105 + 136, 140 + 72) = (241, 212)。由於 241 mod 26 = 7、212 mod 26 = 4,結果為 (7, 4) = HE。
  • 配對 (0, 19):(15*0 + 17*19, 20*0 + 9*19) = (323, 171)。由於 323 mod 26 = 11、171 mod 26 = 15,結果為 (11, 15) = LP。

還原後的明文為 HELP,確認了這個來回過程。如果你希望跳過模逆的推導,但仍想看到完整的代數寫法,配套指南 How to Decrypt a 2x2 Hill Cipher Using the mod 26 Inverse 會更詳細地逐步說明同一個計算過程。

本範例中字母與數字的對應如下:

字母數字角色
H7明文與密文
E4明文
L11明文
P15明文
I8密文
A0密文
T19密文

如何使用 Hill Cipher Decoder 進行解密

  1. 確認練習使用的是 A=0 到 Z=25、兩個字母的行向量,以及在明文長度為奇數時使用 X 進行填補。多數課程採用此慣例;若你的課程並非如此,解碼器仍會執行,但輸出將與你的標準答案不一致。
  2. 將兩列金鑰矩陣輸入為以分號分隔的四個整數,例如 3 3; 2 5。內部會將負數或較大的數值標準化至 0 到 25 的範圍。
  3. 選擇解密模式。
  4. 貼上密文。工具會去除空白、標點符號與數字,並將剩下的字母分成長度為二的行向量。
  5. 執行轉換並讀取 A-Z 大寫的輸出。
  6. 先以一組已知配對測試。使用預設金鑰貼上 HIAT 後,輸出應為 HELP。若已知配對相符,較長的輸出即可信賴;若不相符,表示你的來源所使用的慣例與本頁不同。

會在不知不覺中破壞解密的慣例

Hill cipher 練習在四個方面有所不同。第一是字母對應:本頁使用 A=0, B=1, 一路到 Z=25;部分參考資料從 A=1 開始,這會使每個中間數字都平移一個,進而改變加密結果。第二是向量方向:本頁的慣例為行向量,因此對於金鑰列 a b; c d 與配對 (x, y),加密輸出為 (a*x + b*y, c*x + d*y)。有些教科書使用行向量,這會使整個乘法轉置。第三是區塊大小:本工具僅使用 2x2 區塊;3x3 的 Hill cipher 需要不同的實作。第四是填補:編碼器僅在標準化後的明文長度為奇數時加入一個 X,但解碼器無法判斷還原明文尾端的 X 是填補字元還是真實字母。請在受控練習中記錄原始長度,而不是自動去除尾端的 X。

為何部分金鑰無法解密

2x2 金鑰矩陣 K = [[a, b], [c, d]] 在模 26 下具有模逆矩陣的條件為 gcd(a*d − b*c, 26) = 1。若行列式為偶數,多組明文配對會對應到同一組密文配對,反矩陣便不存在。若行列式為 13 的倍數,也會出現同樣的歧義。Hill Cipher Decoder 會直接拒絕這類金鑰,而非回傳誤導性的文字,因為試以不可逆的金鑰解密幾乎總是代表來源使用了不同的慣例,而非可還原的區塊。常見的有效金鑰包括 3 3; 2 5(本文所用)、1 2; 1 3、5 8; 3 7,以及 7 2; 3 1。這些金鑰的行列式皆與 26 互質。

Hill Cipher 解密的限制與注意事項

Hill cipher 是教學用的密碼,並非實際可用的密碼。已知明文配對會立即透過 mod 26 上的線性代數洩露金鑰,其字母集與區塊大小都很小,且解碼器會刻意將金鑰顯示於輸入欄位中。切勿將其用於密碼、權杖、檔案或任何含個人資訊的訊息。如需真正的機密性,請使用經審核的認證加密機制,例如 AES-GCM。

在解題時有兩項實際限制值得注意。第一,輸入上限為 100,000 個標準化字母,以維持瀏器的回應速度,因此本工具可處理多段落的題組,但無法處理大型資料。第二,標準化後的密文必須包含偶數個字母,因為每個區塊會產出兩個字母。如果你取得的密文在去除空白與標點後字母數為奇數,表示來源可能使用了不同的區塊大小或填補規則。在信任輸出之前,請務必與標準答案核對慣例。

延伸閱讀:A1Z26 Cipher Translator: Read and Write the 1–26 Code