Hill Cipher密码

Hill Cipher密码

Modern_Cryptography 希尔密码是一种多表替代密码,由数学家 Lester S. Hill 在 1929 年提出。它的独特之处在于,它首次将线性代数和模运算系统地应用在密码学中,与之前依靠简单置换或移位的密码(如凯撒密码)相比,在概念上是一个巨大的飞跃

希尔密码的核心思想是:将明文分成等长的分组(向量),然后用一个密钥矩阵乘以这些明文向量,得到密文向量

算法原理

加密步骤

密钥处理

  1. 字符数字化
  • A = 0, B = 1, C = 2, …, Z = 25
  1. 选择密钥矩阵
  • 密钥是一个 n × n 的方阵,其中 n 是分组的大小。
  • 这个矩阵必须是可逆的,并且在模 26 的世界里也必须可逆(即它的行列式与 26 互质,gcd(det(K), 26) = 1)否则,我们将无法解密
K = | 3  3 |
    | 2  5 |

我们可以验证这个密钥是有效的:行列式 (35 - 23) = 15 - 6 = 9。gcd(9, 26) = 1,满足条件。

  1. 加密过程 假设我们要加密明文 “HELLO”,分组大小 n=2。
  • 分组与数字化

“HE” -> H=7, E=4 -> 向量 P1 = [7, 4]
“LL” -> L=11, L=11 -> 向量 P2 = [11, 11]
“O” 最后一个字母不够一组,需要填充r比如填充 ‘X’=23)所以 “OX” -> O=14, X=23 -> 向量 P3 = [14, 23]

  • 矩阵乘法 对每个明文向量 P,执行矩阵乘法:C = K * P (mod 26)
    • 加密第一个分组 “HE”:
    C1 = | 3  3 | * |7| = | (3*7 + 3*4) | = | (21 + 12) | = |33| -> |7|  (mod 26)
         | 2  5 |   |4|   | (2*7 + 5*4) |   | (14 + 20) |   |34| -> |8|
    所以 [7, 4] 被加密为 [7, 8],对应字母 “HI”。
    • 加密第二个分组 “LL”
    C2 = | 3  3 | * |11| = | (3*11 + 3*11) | = | (33 + 33) | = |66| -> |14|  (mod 26)
         | 2  5 |   |11|   | (2*11 + 5*11) |   | (22 + 55) |   |77| -> |25|
    所以 [11, 11] 被加密为 [14, 25],对应字母 “OZ”。
    • 加密第三个分组 “OX”
    C3 = | 3  3 | * |14| = | (3*14 + 3*23) | = | (42 + 69) | = |111| -> |7|  (mod 26)
         | 2  5 |   |23|   | (2*14 + 5*23) |   | (28 + 115) |   |143| -> |13|
    所以 [14, 23] 被加密为 [7, 13],对应字母 “HN”。
  1. 得到密文: 将所有的密文向量连接起来:[7,8] [14,25] [7,13] -> “HIOZHN”。

解密就给各位自己写一手了

希尔密码的特点

优点:

  1. 隐藏字符频率:由于是多表替代,同一个明文字母在不同位置会被加密成不同的密文字母(例如,例子中的 ‘L’ 被加密成了 ‘O’ 和 ‘Z’)。这有效地对抗了基于频率分析的攻击。
  2. 引入现代密码学概念:它将密码的强度依赖于密钥,而不是算法的保密性(柯克霍夫原则的早期体现)。

缺点:

  1. 完全线性:这是它最大的弱点。因为加密过程只是一个线性变换,它非常容易受到已知明文攻击。如果攻击者知道一个明文分组和对应的密文分组,就可以直接计算出密钥矩阵。
  2. 需要填充:当明文长度不是分组大小的整数倍时,需要进行填充。
  3. 密钥管理:密钥矩阵相对较大,分发和管理比简单密钥要麻烦。

代码

这个密码感觉像是思维拓展,所以各位思考思考就行了,我感觉没必要写代码了