希尔密码示例——分步学习
通过从简单 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:
-
应用算法:
- 26 = 2 × 9 + 8
- 9 = 1 × 8 + 1
- 8 = 8 × 1 + 0
-
反向代入,将 1 表示为线性组合:
- 1 = 9 - 1 × 8
- 1 = 9 - 1 × (26 - 2 × 9)
- 1 = 3 × 9 - 1 × 26
-
因此: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 伴随矩阵公式
伴随矩阵是余子式矩阵的转置。每个余子式的计算方法:
- 删除该元素所在的行和列
- 计算剩余 2x2 矩阵的行列式
- 应用符号模式:[[+,-,+],[-,+,-],[+,-,+]]
3x3 矩阵的此过程较为复杂。使用我们的矩阵计算器自动计算 3x3 伴随矩阵。
练习题及解答
练习题一:使用 2x2 矩阵加密
给定:
- 密钥:[[5, 8], [17, 3]]
- 明文:"COLD"
求:密文
点击查看解答
解答:
-
验证密钥:det = (5×3) - (8×17) = 15 - 136 = -121 ≡ 9 (mod 26) ✓
-
转换:C=2, O=14, L=11, D=3
-
块:[2,14], [11,3]
-
加密块 1:
- [[5,8],[17,3]] × [2,14] = [122, 76] ≡ [18, 24] = [S, Y]
-
加密块 2:
- [[5,8],[17,3]] × [11,3] = [79, 196] ≡ [1, 14] = [B, O]
答案:COLD → SYBO
练习题二:求逆矩阵
给定:密钥矩阵 [[3,2],[5,7]]
求:mod 26 下的逆矩阵
点击查看解答
解答:
-
det = (3×7) - (2×5) = 21 - 10 = 11
-
det⁻¹:找 x 使得 11x ≡ 1 (mod 26)
- 11 × 19 = 209 = 8×26 + 1 ≡ 1 (mod 26)
- 所以 det⁻¹ = 19
-
adj = [[7,-2],[-5,3]] ≡ [[7,24],[21,3]] (mod 26)
-
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]]
求:这是否为有效的希尔密码密钥?
点击查看解答
解答:
-
计算行列式:det = (2×5) - (3×4) = 10 - 12 = -2 ≡ 24 (mod 26)
-
检查互质性: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 下可逆。
使用我们的希尔密码计算器验证所有这些示例,并用不同矩阵练习以建立熟练度。