Hill 密码示例和教程

通过面向初学者、中级和高级用户的逐步示例学习 Hill 密码。

2 Examples

Basic 2×2 Encryption

2×2

This is the most basic Hill cipher example using a 2×2 matrix. Each pair of letters is encrypted together as a vector.

Plaintext
HELP
Ciphertext
HIAT
Key Matrix (K)
33
25

Basic 2×2 Decryption

2×2

Decryption requires calculating the inverse matrix. The same process applies to all blocks.

Plaintext
HELP
Ciphertext
HIAT
Key Matrix (K)
33
25

Ready to practice?

Try encrypting and decrypting your own messages with the Hill cipher tool.

希尔密码示例——分步学习

通过从简单 2x2 矩阵加密到高级 3x3 实现及密码分析技术的综合分步示例,掌握希尔密码。这些示例提供完整的计算过程,演示加密和解密的每个阶段。按顺序学习以建立理解,或直接跳到您感兴趣的特定主题。所有示例均可使用我们的希尔密码编码器解码器工具进行验证。

示例一:基础 2x2 希尔密码加密

此基础示例演示使用简单 2x2 密钥矩阵加密"HELP",非常适合理解希尔密码的核心原理。

问题设置

明文:HELP 密钥矩阵

K = [[3, 3],
     [2, 5]]

第一步:验证密钥矩阵的有效性

计算行列式:det(K) = (3 × 5) - (3 × 2) = 15 - 6 = 9

检查与 26 的互质性:9 与 26 没有公因子(9 = 3²,26 = 2 × 13)。由于 GCD(9, 26) = 1,这是一个有效的密钥矩阵。

第二步:将明文转换为数字

使用标准映射 A=0, B=1, ..., Z=25:

  • H = 7
  • E = 4
  • L = 11
  • P = 15

第三步:组成明文向量

将文本按 2 个字母(与 2x2 矩阵大小匹配)分成块:

  • 块 1:HE = [7, 4]
  • 块 2:LP = [11, 15]

第四步:加密第一个块(HE)

将密钥矩阵乘以明文向量:

[[3, 3],     [7]     [3×7 + 3×4]     [21 + 12]     [33]
 [2, 5]]  ×  [4]  =  [2×7 + 5×4]  =  [14 + 20]  =  [34]

第五步:应用模 26

[33, 34] mod 26 = [7, 8]

第六步:转换为字母

[7, 8] = [H, I]

第七步:加密第二个块(LP)

将密钥矩阵乘以第二个明文向量:

[[3, 3],     [11]     [3×11 + 3×15]     [33 + 45]     [78]
 [2, 5]]  ×  [15]  =  [2×11 + 5×15]  =  [22 + 75]  =  [97]

应用模 26:

[78, 97] mod 26 = [0, 19]

转换为字母:[0, 19] = [A, T]

最终结果:HELP → HIAT

此 2x2 希尔密码示例演示了矩阵乘法如何系统地变换明文。请在我们的希尔密码编码器中亲自尝试此示例,实时查看计算过程。

示例二:基础 2x2 希尔密码解密

将密文"HIAT"解密回"HELP",使用逆矩阵,分步演示完整的解密过程。

问题设置

密文:HIAT 原始密钥矩阵

K = [[3, 3],
     [2, 5]]

第一步:计算逆矩阵

首先求行列式(已计算):det(K) = 9

第二步:求行列式的模逆元

需要找到一个数 x,使得 (9 × x) ≡ 1 (mod 26)。

测试值:

  • 9 × 1 = 9 (mod 26) = 9
  • 9 × 2 = 18 (mod 26) = 18
  • 9 × 3 = 27 (mod 26) = 1 ✓

因此,det⁻¹ = 3

第三步:计算伴随矩阵

对于 2x2 矩阵 [[a, b], [c, d]],伴随矩阵为 [[d, -b], [-c, a]]:

adj(K) = [[5, -3],
          [-2, 3]]

对负值应用 mod 26(-3 mod 26 = 23,-2 mod 26 = 24):

adj(K) = [[5, 23],
          [24, 3]]

第四步:计算逆矩阵

将行列式逆元乘以伴随矩阵:

K⁻¹ = 3 × [[5, 23],     [[15, 69],     [[15, 17],
            [24, 3]]  =   [72, 9]]  ≡   [20, 9]] (mod 26)

验证:K × K⁻¹ 应等于单位矩阵 [[1,0],[0,1]] mod 26。

第五步:将密文转换为数字

  • H = 7
  • I = 8
  • A = 0
  • T = 19

组成块:[7, 8] 和 [0, 19]

第六步:解密第一个块(HI)

[[15, 17],     [7]     [15×7 + 17×8]     [105 + 136]     [241]
 [20, 9]]   ×  [8]  =  [20×7 + 9×8]   =  [140 + 72]   =  [212]

应用模 26:

[241, 212] mod 26 = [7, 4] = [H, E]

第七步:解密第二个块(AT)

[[15, 17],     [0]      [15×0 + 17×19]     [0 + 323]     [323]
 [20, 9]]   ×  [19]  =  [20×0 + 9×19]   =  [0 + 171]  =  [171]

应用模 26:

[323, 171] mod 26 = [11, 15] = [L, P]

最终结果:HIAT → HELP

此希尔密码解密示例展示了逆矩阵如何完美地逆转加密过程。请在我们的希尔密码解码器中练习,查看分步可视化。

示例三:3x3 矩阵加密

此高级示例演示使用 3x3 矩阵加密,通过更好的扩散效果和更大的密钥空间提供更强的安全性。

问题设置

明文:ACT 密钥矩阵

K = [[6, 24, 1],
     [13, 16, 10],
     [20, 17, 15]]

第一步:验证行列式

对于 3x3 矩阵,使用余子式展开计算:

det(K) = 6(16×15 - 10×17) - 24(13×15 - 10×20) + 1(13×17 - 16×20)
       = 6(240 - 170) - 24(195 - 200) + 1(221 - 320)
       = 6(70) - 24(-5) + 1(-99)
       = 420 + 120 - 99
       = 441

应用 mod 26:441 mod 26 = 25

检查互质性:GCD(25, 26) = 1 ✓ 有效密钥

第二步:将明文转换为数字

A = 0, C = 2, T = 19

组成向量:[0, 2, 19]

第三步:执行矩阵乘法

[[6, 24, 1],      [0]      [6×0 + 24×2 + 1×19]      [0 + 48 + 19]      [67]
 [13, 16, 10]  ×  [2]   =  [13×0 + 16×2 + 10×19]  =  [0 + 32 + 190]  =  [222]
 [20, 17, 15]]    [19]     [20×0 + 17×2 + 15×19]    [0 + 34 + 285]     [319]

第四步:应用模 26

[67, 222, 319] mod 26 = [15, 14, 7]

第五步:转换为字母

[15, 14, 7] = [P, O, H]

最终结果:ACT → POH

此 3x3 希尔密码示例演示了更高的复杂性和安全性。3x3 矩阵同时处理三个字母,比 2x2 矩阵提供更好的扩散效果。使用我们的矩阵计算器验证这些复杂计算。

示例四:关键词转矩阵

学习如何将易记的关键词转换为有效的希尔密码密钥矩阵,使密钥管理更加实用。

问题:将关键词"HILL"转换为 2x2 矩阵

第一步:写出关键词

关键词:H I L L

第二步:将字母转换为数字

  • H = 7
  • I = 8
  • L = 11
  • L = 11

第三步:按行填充矩阵

K = [[7, 8],
     [11, 11]]

第四步:验证密钥矩阵

计算行列式:

det(K) = (7 × 11) - (8 × 11) = 77 - 88 = -11

应用 mod 26:-11 mod 26 = 15

检查互质性:GCD(15, 26) = 1 ✓ 有效密钥

关键词"HILL"生成了一个有效的加密矩阵。

处理不同长度的关键词

关键词比所需更短(例如,2x2 用"HI")

如果关键词的字母数少于 n²,用字母表中的其他字母填充:

  • 关键词:HI
  • 添加:AB
  • 矩阵:[[7, 8], [0, 1]]

关键词比所需更长(例如,2x2 用"HILLCIPHER")

只取前 n² 个字母:

  • 关键词:HILLCIPHER
  • 使用:HILL
  • 矩阵:[[7, 8], [11, 11]]

对于 3x3 矩阵

需要 9 个字母。示例关键词"CRYPTOGRA":

K = [[2, 17, 24],
     [15, 19, 14],
     [6, 17, 0]]

使用前请始终验证结果矩阵。我们的希尔密码计算器自动处理带验证的关键词转矩阵操作。

示例五:已知明文攻击

此示例演示希尔密码的关键漏洞,展示攻击者如何用最少的已知明文-密文对恢复秘密密钥。

攻击场景

截获的密文:"APADJ" 已知明文:明文的前 4 个字符为"HELL"

攻击准备

已知信息

  • 明文块:HE, LL → [7,4], [11,11]
  • 对应密文:AP, AD → [0,15], [0,3]

攻击过程

第一步:构建明文矩阵 P

P = [[7, 11],
     [4, 11]]

每列代表一个明文块。

第二步:构建密文矩阵 C

C = [[0, 0],
     [15, 3]]

每列代表对应的密文块。

第三步:建立方程

我们知道 C = K × P (mod 26),因此 K = C × P⁻¹ (mod 26)

第四步:计算 P⁻¹

求行列式:det(P) = (7 × 11) - (11 × 4) = 77 - 44 = 33 ≡ 7 (mod 26)

求 7 mod 26 的模逆元:7⁻¹ = 15(因为 7 × 15 = 105 ≡ 1 mod 26)

计算伴随矩阵:adj(P) = [[11, -11], [-4, 7]] ≡ [[11, 15], [22, 7]] (mod 26)

计算逆矩阵:

P⁻¹ = 15 × [[11, 15],     [[165, 225],     [[9, 17],
             [22, 7]]  =   [330, 105]]  ≡   [18, 1]] (mod 26)

第五步:恢复密钥矩阵

K = C × P⁻¹ (mod 26)

K = [[0, 0],     [[9, 17],     [[0, 0],
     [15, 3]] ×   [18, 1]]  =   [189, 258]]

应用 mod 26:

K = [[0, 0],
     [7, 24]]

第六步:解密剩余密文

使用恢复的密钥,计算 K⁻¹ 并解密最后一个字符"J",确定完整明文。

教育意义

此已知明文攻击示例演示了为什么希尔密码不适用于现代安全通信。只需 4 个字符(2x2 的两个块)的已知明文-密文对就足以完全破解密码。攻击之所以有效,是因为希尔密码加密完全是线性的,形成了可解的线性方程组。

对于 3x3 矩阵,需要 9 个已知字符(3 个块)才能执行相同的攻击。请在我们的解码器已知明文攻击模式中尝试此攻击方法。

数学深入探讨

行列式计算方法

2x2 行列式公式

对于矩阵 [[a,b],[c,d]]:

det(K) = ad - bc

以 [[3,3],[2,5]] 为例:

det = (3 × 5) - (3 × 2) = 15 - 6 = 9

应用 mod 26:9 mod 26 = 9

使用余子式展开的 3x3 行列式

对于矩阵 [[a,b,c],[d,e,f],[g,h,i]]:

det(K) = a(ei - fh) - b(di - fg) + c(dh - eg)

以 [[6,24,1],[13,16,10],[20,17,15]] 为例:

det = 6(16×15 - 10×17) - 24(13×15 - 10×20) + 1(13×17 - 16×20)
    = 6(240-170) - 24(195-200) + 1(221-320)
    = 6(70) - 24(-5) + 1(-99)
    = 420 + 120 - 99
    = 441 ≡ 25 (mod 26)

模逆元计算

定义:模逆元 a⁻¹ mod n 是满足 (a × x) ≡ 1 (mod n) 的数 x

扩展欧几里德算法

求 9⁻¹ mod 26:

  1. 应用算法:

    • 26 = 2 × 9 + 8
    • 9 = 1 × 8 + 1
    • 8 = 8 × 1 + 0
  2. 反向代入,将 1 表示为线性组合:

    • 1 = 9 - 1 × 8
    • 1 = 9 - 1 × (26 - 2 × 9)
    • 1 = 3 × 9 - 1 × 26
  3. 因此:9⁻¹ ≡ 3 (mod 26)

mod 26 常用模逆元

快速参考表:

  • 1⁻¹ = 1
  • 3⁻¹ = 9
  • 5⁻¹ = 21
  • 7⁻¹ = 15
  • 9⁻¹ = 3
  • 11⁻¹ = 19
  • 15⁻¹ = 7
  • 17⁻¹ = 23
  • 19⁻¹ = 11
  • 21⁻¹ = 5
  • 23⁻¹ = 17
  • 25⁻¹ = 25

mod 26 下没有模逆元的数:2, 4, 6, 8, 10, 12, 13, 14, 16, 18, 20, 22, 24(均与 26 有公因子)

伴随矩阵计算

2x2 伴随矩阵公式

对于矩阵 [[a,b],[c,d]]:

adj(K) = [[d, -b],
          [-c, a]]

以 [[3,3],[2,5]] 为例:

adj(K) = [[5, -3],
          [-2, 3]]

对负值应用 mod 26:

adj(K) = [[5, 23],
          [24, 3]]

3x3 伴随矩阵公式

伴随矩阵是余子式矩阵的转置。每个余子式的计算方法:

  1. 删除该元素所在的行和列
  2. 计算剩余 2x2 矩阵的行列式
  3. 应用符号模式:[[+,-,+],[-,+,-],[+,-,+]]

3x3 矩阵的此过程较为复杂。使用我们的矩阵计算器自动计算 3x3 伴随矩阵。

练习题及解答

练习题一:使用 2x2 矩阵加密

给定

  • 密钥:[[5, 8], [17, 3]]
  • 明文:"COLD"

:密文

点击查看解答

解答

  1. 验证密钥:det = (5×3) - (8×17) = 15 - 136 = -121 ≡ 9 (mod 26) ✓

  2. 转换:C=2, O=14, L=11, D=3

  3. 块:[2,14], [11,3]

  4. 加密块 1:

    • [[5,8],[17,3]] × [2,14] = [122, 76] ≡ [18, 24] = [S, Y]
  5. 加密块 2:

    • [[5,8],[17,3]] × [11,3] = [79, 196] ≡ [1, 14] = [B, O]

答案:COLD → SYBO

练习题二:求逆矩阵

给定:密钥矩阵 [[3,2],[5,7]]

:mod 26 下的逆矩阵

点击查看解答

解答

  1. det = (3×7) - (2×5) = 21 - 10 = 11

  2. det⁻¹:找 x 使得 11x ≡ 1 (mod 26)

    • 11 × 19 = 209 = 8×26 + 1 ≡ 1 (mod 26)
    • 所以 det⁻¹ = 19
  3. adj = [[7,-2],[-5,3]] ≡ [[7,24],[21,3]] (mod 26)

  4. K⁻¹ = 19 × [[7,24],[21,3]] = [[133,456],[399,57]] ≡ [[3,14],[9,5]] (mod 26)

答案:K⁻¹ = [[3,14],[9,5]]

练习题三:使用 3x3 矩阵解密

给定

  • 密钥:[[2,4,5],[9,2,1],[3,17,7]]
  • 密文:"XYZ"

:明文

点击查看解答

解答:此问题需要计算 3x3 逆矩阵,涉及复杂的余子式计算。行列式为 111 ≡ 7 (mod 26),而 7⁻¹ = 15 (mod 26)。使用完整的伴随矩阵计算并将逆矩阵应用于向量 [23,24,25],可以解密密文。使用我们的希尔密码解码器自动验证此 3x3 解密。

练习题四:判断矩阵有效性

给定:矩阵 [[2,3],[4,5]]

:这是否为有效的希尔密码密钥?

点击查看解答

解答

  1. 计算行列式:det = (2×5) - (3×4) = 10 - 12 = -2 ≡ 24 (mod 26)

  2. 检查互质性:GCD(24, 26) = 2

答案:无效。行列式 24 与 26 有公因子(2),使矩阵在 mod 26 下不可逆。请选择其他矩阵。

练习题五:高级挑战

给定:您截获了密文"KQOWEFVJP",并知道它是用 3x3 希尔密码加密的。您发现明文的前三个字母是"THE"。

:您能恢复密钥并解密完整消息吗?

点击查看解答

提示:完整的 3x3 攻击需要 9 个字母(3 个块)。只知道一个块的情况下,无法唯一确定包含 9 个元素的密钥矩阵。您还需要两个已知块才能成功执行攻击。这说明 3x3 希尔密码比 2x2 需要更多已知明文才能进行密码分析。

常见问题

在哪里可以找到带解答的希尔密码示例?

本页提供了全面的希尔密码示例和完整的分步解答,包括 2x2 和 3x3 加密与解密、关键词转矩阵、已知明文攻击演示以及详细的数学计算。所有示例都包含验证步骤,可使用我们的在线希尔密码工具进行测试。

如何分步求解希尔密码?

分步求解希尔密码加密:将每个字母转换为其数值(A=0 到 Z=25),构建密钥矩阵并通过检查行列式互质性确保其有效,将明文按矩阵维度分块,从每块组成列向量,执行密钥矩阵与明文向量的矩阵乘法,对所有结果应用模 26,并将结果数字转换回字母。有关每个计算步骤的完整演示,请参见上方的示例一。

希尔密码 2x2 示例及解答?

示例一演示了使用密钥矩阵 [[3,3],[2,5]] 将"HELP"加密为"HIAT",展示了所有矩阵乘法步骤、模运算和转换过程。示例二展示了从"HIAT"逆向解密回"HELP"的过程,包括使用行列式、模逆元和伴随矩阵方法的逆矩阵计算。两个示例都提供了完整的每步计算,非常适合学习 2x2 希尔密码操作。

希尔密码 3x3 示例?

示例三演示了使用 3x3 密钥矩阵将"ACT"加密为"POH",展示了更复杂的行列式余子式展开方法、三元素向量的 3x3 矩阵乘法以及大型矩阵带来的更高安全性优势。3x3 希尔密码示例说明了同时处理三个字母如何比 2x2 矩阵提供更好的扩散效果和更大的密钥空间,尽管计算复杂度有所增加。

希尔密码已知明文攻击示例?

示例五演示了一个完整的已知明文攻击,攻击者仅使用 4 个已知字符(两个块)的匹配明文-密文对就能恢复秘密密钥矩阵。示例展示了如何构建明文和密文矩阵、计算明文矩阵的逆矩阵以及相乘以恢复原始密钥。此示例揭示了希尔密码对此类攻击的根本漏洞,说明尽管数学上优雅,它不适用于现代安全通信。

如何将关键词转换为希尔密码矩阵?

示例四展示了将关键词"HILL"转换为 2x2 矩阵的完整过程:写出关键词字母,将每个字母转换为其数值(H=7, I=8, L=11, L=11),按行填充矩阵创建 [[7,8],[11,11]],并通过检查行列式互质性进行验证。示例还涵盖处理比所需更短或更长的关键词,以及演示 3x3 关键词转换。使用前请始终验证结果矩阵,确保其在 mod 26 下可逆。

使用我们的希尔密码计算器验证所有这些示例,并用不同矩阵练习以建立熟练度。