仿射密码加密与解密
明文
密文
什么是仿射密码?
仿射密码(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),确保斜率与字母表长度互质,以避免计算错误。
- 自定义字母表:支持自定义字母表,可以输入大写字母、小写字母、数字,或多语言字符集。
- 忽略未知字符:在加密或解密过程中,可以选择是否忽略未知字符(如空格、标点符号等)。如果选择忽略,它们将不会影响加解密操作。
- 复制和下载结果:加密或解密后的结果可以直接复制,或者通过工具提供的下载选项将结果保存为文件,方便后续使用。