Hill 密碼解碼器單次提交最多接受 100,000 個英文字母,會依嚴格的模 26 規則,以可逆的 2×2 鍵矩陣進行處理,並回傳正規化後的 A–Z 輸出,且絕不上傳輸入內容。在此,「大量」是指一次貼上一段很長的文字——例如作業題組、多段密文,或教科書練習的整個章節——而不是一批各自使用不同金鑰的訊息。此工具一律使用 A=0 至 Z=25、兩字母的欄向量、為奇數長度明文自動補上 X,並拒絕行列式與 26 不互質的金鑰。由於在執行任何數學運算前,密碼會移除空格、標點符號及數字,因此長輸入與短輸入會經過相同的模運算;實際上限只取決於輸入上限與瀏覽器的回應速度。對於正在研習 Lester Hill 區塊密碼的學生與教師而言,這個上限足以讓他們一次處理完整的一組練習題,而這正是大量 Hill 密碼解碼旨在節省時間之處。

為何大量 Hill 密碼解碼容易讓人困惑
自 Lester Hill 於 1929 年發表論文以來,Hill 密碼已不斷在教科書、簡報、程式設計教學及線上計算機中重新實作,而幾乎每份參考資料都採用略有不同的規則。一種方式將字母對放在列向量中;另一種方式將 A 對應至 1,而非 0;還有一種方式完全不補位,或使用其他字母補位。當輸入只是簡短的作業詞語時,這些差異很少會顯現,因為各方對可見字母的解讀一致。當輸入是大量文字時——例如評分練習題組中的一段 200 字密文——每個規則差異都會在每個兩字母區塊中疊加,而錯誤結果可能看似合理長達數頁,直到教師察覺。Hill 密碼解碼器明確記錄了其規則:A 為 0、B 為 1,依此類推至 Z 的 25;字母對是長度為兩的欄向量;正規化明文長度為奇數時,加密會在末尾補上一個 X;每個區塊都依模 26 化簡。輸入中的其他所有內容——空格、標點符號、數字、換行——都會在執行矩陣運算前移除,輸出則完全是 A–Z 大寫字母。
另一個陷阱是「大量」這個詞本身。它不是指「同時處理採用不同金鑰的多段密文」,也不是指「多個各自使用不同金鑰的短字母對清單」。它是指在單次瀏覽器處理中,以單一 2×2 金鑰處理一段最長 100,000 個字母的 A–Z 長字串。這能涵蓋完整段落、多頁作業,以及從 PDF 貼上並移除格式後的練習內容,但不支援跨金鑰批次處理。需要使用數個金鑰比對同一段密文的人,應針對每個金鑰執行一次工具,並記下每次的輸出。
「大量」對此工具的意義
每次大量處理都受 3 項條件約束。第一是字母集:正規化後只會保留 26 個大寫字母,因此任何小寫字母都必須先轉為大寫再貼上,而帶有變音符號的字母則會直接消失。第二是區塊結構:每個密文區塊恰好包含兩個字母,因此解密時,正規化輸入必須包含偶數個字母;工具會直接拒絕奇數長度的密文。明文則可以是奇數長度,因為加密時會補上一個 X。第三是金鑰:行列式必須與 26 互質,這會將反矩陣限定為行列式為奇數且不能被 13 整除的金鑰。未通過此檢查的金鑰會遭拒,而不會悄悄產生無意義文字。
其他限制則源自實作方式。負數及較大的金鑰項目會自動正規化至 0–25 範圍。超過 100,000 個字母的輸入會遭拒,以維持瀏覽器的回應速度。輸出只包含大寫字母,並刻意省略已移除的呈現字元,因此若練習要求還原單字間距,必須另行重建間距。這些選擇讓大量解碼變得容易預測:貼上、執行、與已知字母對比對,然後再信任較長的輸出。
如何執行大量 Hill 密碼解碼
- 確認練習採用 A=0 至 Z=25、兩字母的欄向量,以及為奇數長度明文補上 X。若來源使用 A=1 或列向量,請改用符合該規則的其他工具。
- 以分號分隔的 4 個整數輸入矩陣的兩個列(例如,3 3; 2 5)。負數或超出範圍的值會經過正規化;不互質的行列式會遭拒。
- 依練習要求的方向選擇加密或解密。解密時,會先確認行列式與 26 互質,再計算模 26 的反矩陣。
- 將完整 A–Z 文字貼入輸入欄位。空格、換行、標點符號及數字會自動移除;您不必事先清理,但大寫格式確實會影響可讀性。
- 執行轉換,並先比對 HELP 與 HIAT 等已知字母對,再依賴較長的輸出。若在此階段出現不一致,通常表示規則不同,而非瀏覽器錯誤。
- 將正規化的 A–Z 輸出與預期密文或明文比對。若大量輸入包含多個單字,請使用另行保存的原始版面配置記錄,手動還原空格。
準備長段貼上內容及多行輸入
大量解碼幾乎總是從清理貼上內容開始。大多數練習是由大小寫混合的段落組成,有時還包含引號、破折號或頁碼。由於解碼器會移除 A–Z 以外的所有內容,唯一真正重要的準備作業,就是確保每個字母都是大寫,且沒有意外貼入多餘字元。這份大量二進位解碼指南所述的工具,也面臨呈現格式與正規化資料之間類似的取捨,而相同原則也適用於此處:複製字母、忽略版面配置,之後再還原版面配置。
貼上內容中的換行不具任何語意。在相同金鑰下分行貼上的兩段密文,經解碼器移除換行後,仍會形成一段連續的正規化字串。若目標是使用兩個金鑰比對同一段密文,請針對每個金鑰執行一次工具,並分別保存每次輸出。嘗試在單次處理中串接多個金鑰,只會使反矩陣運算更加混亂,因為每次提交所使用的矩陣都是固定的。
提交前,也應快速檢查長度。一般而言,一段 400 字的段落會正規化為約 2,000 個字母——遠低於 100,000 的上限,也完全在可維持回應速度的範圍內。不過,教科書練習的整個章節可能很容易超過 20,000 個字母。在這種規模下,輸出會長到不適合只用肉眼瀏覽。請先比對已知字母對,再掃描大量結果的開頭與結尾,而非檢查中間部分。
使用 HELP → HIAT 字母對驗證大量輸出
工具自身說明頁面上的預設金鑰是 3 3; 2 5,標準測試字母對則是 HELP 產生 HIAT。親手逐步驗證一個區塊,會讓後續更容易診斷任何大量處理不一致。
H 為 7,E 為 4,構成欄向量 [7; 4]。乘上金鑰:
- 第 1 列:3·7 + 3·4 = 21 + 12 = 33,依模 26 化簡後為 7,對應回 H。
- 第 2 列:2·7 + 5·4 = 14 + 20 = 34,依模 26 化簡後為 8,對應回 I。
第 2 個區塊使用 L = 11 與 P = 15,向量 [11; 15]:
- 第 1 列:3·11 + 3·15 = 33 + 45 = 78,依模 26 化簡後為 0,對應回 A。
- 第 2 列:2·11 + 5·15 = 22 + 75 = 97,依模 26 化簡後為 19,對應回 T。
HELP 會在一次處理中變成 HIAT。對於此金鑰,只要明文中出現 HELP,工具產生的任何大量密文都應在完全相同的位置保留該區塊,而反向解密則應從 HIAT 還原 HELP。若結果並非如此,下一步就應查看下方的規則比較表。
| 規則 | 此工具 | 部分教科書 | 部分實作 |
|---|---|---|---|
| 字母對應 | A = 0 至 Z = 25 | A = 0 或 A = 1 | A = 1 至 Z = 26 |
| 向量方向 | 欄向量(長度 2) | 列向量(長度 2) | 任一方向 |
| 補位規則 | 僅奇數長度明文補上一個 X | 無 | Q 或隨機填補字元 |
| 區塊大小 | 固定為 2 | 固定為 2 | 固定為 2 或 3 |
| 解密要求 | det(K) 與 26 互質 | 相同 | 相同 |
大量處理遭拒的情況及修正方式
工具會直接拒絕 4 種特定情況,而不會自行猜測。第一種是正規化輸入為空——只貼上空白或標點符號不會產生任何可用內容,因此計算機會拒絕執行。第二種是輸入超過 100,000 個字母;修正方式是將貼上內容裁切成較小段落,並在相同金鑰下分別處理每個段落。
第三種是金鑰無效。若所提交矩陣的行列式為偶數或可被 13 整除,該金鑰就不具唯一的模反矩陣,且多組明文字母對可能對應至同一段密文。介面會拒絕這類金鑰,而不會回傳誤導性的文字。選擇行列式為 3、5、9、15、21 或 23 等值的金鑰即可通過檢查,而預設的 3 3; 2 5 具有行列式 9,與 26 互質。
第四種是解密端的奇數長度密文。由於每個密文區塊恰好包含兩個值,正規化密文必須包含偶數個字母。若末尾似乎缺少字母,請再次確認原始來源是否已在傳輸前移除補位用的 X。工具會刻意保留解密後末尾的 X,因為自動移除它可能會破壞真正的訊息字元。在加密時記下原始訊息長度即可避免此類歧義;否則,受控練習應指定末尾的 X 是否具有意義,或只是補位字元。
若遇到其他任何不一致——例如輸出中的可見字母看似錯誤,或大量結果與另行手動計算的範例不同——上方的規則比較表就是最快速的診斷方式。不同來源採用不同規則,而在已知字母對階段出現不一致,幾乎總是表示問題出在其中一欄,而非瀏覽器的算術錯誤。
若您正在比較選項,ROT13 解碼器速查表:ASCII 對應及使用方式對此有詳細說明。