2x2 Hill 密碼解碼器需要四個金鑰整數、一套將 A=0 至 Z=25 對應的欄向量慣例,以及一個行列式與 26 互質的矩陣;Hill Cipher Decoder 完全在您的瀏覽器中套用該慣例,因此它能取代腳本端點、Python 函式庫以及 C 命令列工具,無需將密文或金鑰傳送至任何伺服器。本頁將 A=0、B=1、…、Z=25 對應,把標準化後的文字切成兩個字母一組的欄向量,把每個向量乘以所輸入的 2x2 金鑰,然後把兩個結果都取模 26 以產生密文。同一個介面也能反向操作,把每對密文乘以金鑰的模反元素,此模反元素僅在金鑰矩陣的行列式與 26 互質時存在。正因為最後這項條件,當金鑰無法反轉時(例如行列式為偶數),系統會事先拒絕,而不是悄悄回傳錯誤結果。由於整個運算都在本機執行,學習者或解題者可以貼上密文、輸入已知金鑰,並用一組已知的明文-密文對(在預設金鑰 3 3; 2 5 下 HELP 會變成 HIAT)來比對,再決定是否信任較長段落的輸出。

為何瀏器工具勝過 Hill 密碼端點
大多數已發佈的 Hill 密碼輔助工具可分為三類:帶有速率限制與身分驗證的伺服器端 REST 端點、以 Python、C 或 Java 撰寫且需要安裝匯入的函式庫,或只能單向處理的小型獨立腳本。這些途徑各自帶有與密碼本身無關的設定成本。REST 端點需要 API 金鑰、基底 URL,通常還要為極小承載包一層 JSON。Python 函式庫需要執行環境、虛擬環境,以及足夠的樣板程式碼來匯入模組、解析金鑰、標準化文字,然後依序呼叫 encrypt 與 decrypt 函式。C 或 Java 程式則需要編旗標,以及把文字導入與匯出二進位檔的方式。
Hill Cipher Decoder 把上述一切都濃縮成單一頁面。沒有安裝步驟、沒有 API 金鑰、沒有 JSON 外殼,也沒有編譯器。您以兩個由分號隔開的列輸入四個金鑰值,選擇 encrypt 或 decrypt,貼上 A–Z 文字,即可讀取結果。沒有任何資料會離開瀏器分頁,這對於課堂作業與謎題(密文理應保持私密)非常重要,對於不想為了檢查一對字母就啟動整個開發環境的練習而言也很關鍵。能解密老師範例的同一頁,也能加密學生的回覆,因此您無需在腦中或終端機裡維護兩條不同的程式路徑。
本頁採用的確切慣例
慣例差異是 Hill 密碼出現「答案錯誤」抱怨最常見的原因,因此本頁在您送出任何內容之前,先以白話說明規則。字母對應方式為 A=0、B=1、C=2、…、Z=25。文字會去除空格、標點、數字以及任何非 A–Z 的字元;僅處理留下的字母,且輸出恆為大寫 A–Z。字母會被分成兩個一組的欄向量,因此訊息 HELP 會變成欄向量 [7, 4],接著是 [11, 15]。金鑰以 2x2 矩陣形式輸入,寫法為 a b; c d,代表第一列為 a b,第二列為 c d。加密公式為 C = K · P,其中 P 為欄向量:對一對 (x, y) 來說,密文對為 (a·x + b·y, c·x + d·y),每個值皆取模 26。
由該公式再衍生出兩條規則。第一,若標準化後的明文長度為奇數,會在輸入尾端補上一個 X 再進行分組;產生的密文長度必為偶數,但解密後無法區分真正以 X 結尾的明文與純粹的填充。第二,金鑰必須在模 26 下可反矩陣,代表行列式 a·d − b·c 必須與 26 互質。當行列式與 26 共享因子 2 或 13(例如 0、2、4、6、8、10、12、13、14、16、18、20、22、24、26)時,該金鑰無法唯一還原,因此本頁會直接拒絕,而不是回傳誤導的半成品解密結果。
在覽器中解碼 Hill 密碼
若要手動解密 2x2 Hill 密碼,通常需要計算金鑰的模反元素、把每對密文乘以該反元素,再把結果取模 26。本計算器會完全依照該流程為您完成。第一次處理來自老師、教科書或謎題的密文時,可依下列步驟操作。
- 確認對方採用 A=0 至 Z=25、兩個字母一組的欄向量,以及奇數長度明文的單一 X 填充規則。若對方描述的是不同的對應方式或不同的區塊大小,那麼您解的是另一種密碼。
- 開啟 Hill Cipher Decoder,以兩個由分號隔開的列輸入金鑰,例如 3 3; 2 5。系統接受負數與大於 25 的數值,並會自動標準化到 0–25 區間。
- 選擇 decrypt,然後以大寫 A–Z 字母(不含空格)貼上密文。若標準化後的密文字母數不是偶數,本頁會直接拒絕輸入,而不會擅自猜測。
- 點擊轉換按鈕並讀取標準化後的輸出。結果僅含大寫字母;原始的空格、標點或數字不會被還原。
- 在信任較長的訊息之前,請用一組已知配對驗證工具。在預設金鑰 3 3; 2 5 下,明文 HELP 會變成密文 HIAT:H=7、E=4 得出 (3·7 + 3·4, 2·7 + 5·4) = (33, 34),取模 26 後為 (7, 8) = HI;L=11、P=15 得出 (3·11 + 3·15, 2·11 + 5·15) = (78, 97),取模 26 後為 (0, 19) = AT。若您的計算與該配對不符,幾乎一定是慣例差異,而不是瀏覽器的算術錯誤。
- 若解密後的文字出現結尾 X,請依加密前記錄的原始訊息長度判斷它是填充還是真正的字母;本頁會保留 X,以免悄悄刪除真實字元。
若要加密,在步驟 3 中切換方向即可。輸入明文、選擇 encrypt,本頁會自動以 X 填充奇數長度的輸入。產生的結果為大寫 A–Z 密文,可直接交給使用相同金鑰與慣例的對方。
解密結果看起來不對時
Hill 密碼看似錯誤的結果,幾乎都可追溯到三件事之一:不同的字母對應數字方式、不同的向量方向、或不同的填充規則。有些參考資料從 A=1 起算而非 A=0,這會讓每個數字平移一位,並打亂輸出。也有資料把兩個字母視為列向量並從右側相乘,等同於把金鑰轉置。還有些則使用隨機字母而非固定的 X 進行填充。本頁無法偵測對方採用哪一套慣例;它能做的是清楚記載自身慣例,而上一節正是如此。若老師給的解答對相同可見數字產生不同密文,請把這視為訊號,去詢問對方究竟遵循哪一套慣例。
第二常見的問題是結尾 X。只要標準化後的明文長度為奇數,加密時便會補上 X。解密時無法判斷該 X 是填充還是訊息末端的真實字母,因此本頁會保留原樣。若您在加密前已記錄原始明文,請比對解密後的長度與該記錄長度,只有在去掉結尾 X 後兩者相符時,才能將其移除。
第三個問題是金鑰遭拒。若本頁以明確的錯誤訊息拒絕您的金鑰,代表矩陣的行列式不與 26 互質,亦即不存在模反元素,且對該金鑰而言解密結果不唯一。請選擇行列式為 1、3、5、7、9、11、15、17、19、21、23 或 25 的其他金鑰再試一次。空白的標準化輸入,以及長度超過 100,000 個標準化字母的密文,同樣會被拒絕,以維持互動的流暢度。
Hill 密碼在 2026 年的限制
Hill 密碼在密碼學史上具有重要地位,因為它是最早將線性代數應用於多重字母替代的密碼之一,以兩個字母為單位取代了單一字母替代。這份歷史重要性同時也是它現代弱點的根源。字母表僅有 26 個字母、區塊大小只有 2,而且整個轉換是在模 26 整數下的線性變換。任何能猜出或取得單一明文-密文配對的人,就能得到四個未知金鑰元素的兩個線性方程式,而第二對通常就足以完全決定金鑰。對任何區塊大小為二的 Hill 密碼而言,已知明文攻擊都是可行的,這也是為何沒有任何現代安全協定直接採用此結構。
本頁在介面上直接顯示金鑰、以本機方式處理資料,目的是用於教學、作業、謎題解題與休閒性質的密碼學。它不適用於密碼、身分驗證權杖、個人資訊、檔案,或任何實際生產環境的訊息。若需要真正的機密性,請使用經審核的認證加密機制,例如 AES-GCM,並搭配絕不與密文一同傳輸的金鑰。2x2 Hill 密碼仍然是學習矩陣乘法、模反元素與區塊密碼如何搭配的絕佳題材,而本計算器則是無需架設伺服器就能驗證學習成果的最快方式。
Hill 密碼端點與本工具的比較
下表總結了典型的 Hill 密碼 API 或函式庫,在哪些面相對瀏覽器版的 Hill Cipher Decoder 多出額外負擔。請依此判斷哪種方式最符合您眼前的任務。
| 考量面向 | 典型的 Hill 密碼 API 或函式庫 | Hill Cipher Decoder |
|---|---|---|
| 設定 | 安裝執行環境、匯入函式庫,或註冊 API 金鑰 | 在瀏覽器中開啟本頁 |
| 網路流量 | 密文與金鑰會送到遠端端點 | 全部在本機處理 |
| 慣例掌控 | 依函式庫而異;常見有列向量、A=1 等其他規則 | 本頁明確記載的 A=0 欄向量慣例 |
| 金鑰驗證 | 對不可反矩陣的金鑰可能回傳誤導性文字 | 拒絕行列式不與 26 互質的金 |
| 輸入大小上限 | 取決於伺服器配額或記憶體限制 | 100,000 個標準化字母 |
| 方向切換 | 通常分為兩個函式或端點 | 單一 encrypt 或 decrypt 切換鈕 |
| 已知配對檢查 | 通常未內建 | 預設金鑰可將 HELP 變成 HIAT,便於快速驗證 |
對於一次性解密、課後作業檢查,或謎題線索,瀏覽器內的做法省去了 API 原本要求的所有膠水程式碼。對於已採用 REST、且需要批次處理數千則訊息的正式生產流程,經過測試的函式庫仍有其價值——但它應該包裝現代密碼,而不是歷史上的 Hill 結構。