仿射密碼加密與解密
明文
密文
什麼是仿射密碼?
仿射密碼(Affine Cipher)是一種經典的對稱加密算法,是替換式密碼的一種變體,它通過數學公式對字母進行加密。仿射密碼的核心思想是使用數學運算將字母映射到另一個字母上,其加密過程基於一個線性方程式,將每個字母的數位值與兩個常數(斜率和截距)結合,生成新的字母。
仿射密碼的加密公式為:
E(x) = (ax + b) mod m
其中:
- x 是明文字母的數字表示(如A=0,B=1,C=2,依此類推)
- a 是斜率(加密密鑰之一)
- b 是截距(加密密鑰之二)
- m 是字母表的長度(例如英文字母表為26)。
仿射密碼的解密公式為:
D(x) = a-1(x - b) mod m
其中,a-1 是斜率 a 的模逆元素,意味著它是與 a 互質的一個數。
仿射密碼如何加密?
- 選擇字母表:可以使用標準的字母表(如“ABCDEFGHIJKLMNOPQRSTUVWXYZ”)或者自定義字母表。
- 設置斜率(a)和截距(b):設置一個斜率 a,它應當與字母表的長度 m 互質(即它們的最大公約數為1)。另外一個截距 b,它是加密過程中的一個常數。
- 轉換明文到數位:將明文中的每個字母轉換為字母表中對應的數位,例如,A=0,B=1,C=2,…,Z=25。
- 應用加密公式:對每個數位 x,使用公式 E(x) = (ax + b) mod m 進行加密。
- 輸出密文:將加密後的數位轉換回字母,得到密文。
示例
假設我們使用標準英文字母表(A - Z,長度26),選擇斜率 a = 5 和截距 b = 8,對明文 "HELLO" 進行加密。
1. 將明文轉到字母表數位:
- H = 7
- E = 4
- L = 11
- L = 11
- O = 14
2. 應用加密公式:
- H:E(7) = (5 × 7 + 8) mod 26 = 17,即“R”。
- E:E(4) = (5 × 4 + 8) mod 26 = 2,即“C”。
- L:E(11) = (5 × 11 + 8) mod 26 = 11,即“L”。
- L:E(11) = (5 × 11 + 8) mod 26 = 11,即“L”。
- O:E(14) = (5 × 14 + 8) mod 26 = 0,即“A”。
所以,最終密文為:RCLLA。
仿射密碼如何解密?
- 計算斜率的模逆:為了進行解密,需要計算斜率 a 在模 m 下的逆元素 a-1。模逆是指找到一個數 a-1,使得 a × a-1 ≡ 1 mod m。
- 應用解密公式:對於每個密文字母的數字表示 x,使用解密公式 D(x) = a-1(x - b) mod m 來解密。
示例
假設密文為 "RCLLA",斜率 a = 5 和截距 b = 8,我們要解密這個密文。
1. 計算斜率 a 的模逆:
斜率 a = 5,我們需要找到 a-1 使得 5 × a-1 ≡ 1 mod 26。
經計算, a-1 = 21,因為 5 × 21 = 105 ≡ 1 mod 26。
2. 轉換密文到數位:
- R = 17
- C = 2
- L = 11
- L = 11
- A = 0
3. 應用解密公式:
- R:D(17) = 21 × (17 - 8) mod 26 = 7,即“H”。
- C:D(2) = 21 × (2 - 8) mod 26 = 4,即“E”。
- L:D(11) = 21 × (11 - 8) mod 26 = 11,即“L”。
- L :D(11) = 21 × (11 - 8) mod 26 = 11,即“L”。
- A:D(0) = 21 × (0 - 8) mod 26 = 14,即“O”。
所以,RCLLA 對應的明文為:HELLO。
如何使用仿射密碼工具?
- 輸入明文或密文:根據需求在對應的輸入框內輸入明文或密文。
- 設置斜率和截距:設置斜率(a)和截距(b),確保斜率與字母表長度互質,以避免計算錯誤。
- 自定義字母表:支持自定義字母表,可以輸入大寫字母、小寫字母、數位,或多語言字元集。
- 忽略未知字符:在加密或解密過程中,可以選擇是否忽略未知字符(如空格、標點符號等)。如果選擇忽略,它們將不會影響加解密操作。
- 複製和下載結果:加密或解密後的結果可以直接複製,或者通過工具提供的下載選項將結果保存為檔案,方便後續使用。