希尔密码示例和教程

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

基础 2×2 加密

2×2

这是使用 2×2 矩阵的最基本希尔密码示例。每对字母作为向量一起加密。

明文
HELP
密文
HIAT
密钥矩阵 (K)
33
25

基础 2×2 解密

2×2

解密需要计算逆矩阵。同样的过程适用于所有块。

明文
HELP
密文
HIAT
密钥矩阵 (K)
33
25

准备好练习了吗?

使用希尔密码工具尝试加密和解密您自己的消息。

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

通过从简单 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 下可逆。

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