💻 第十章 试着加密数据吧
📄 一句话概括

不知道密钥就只能暴力试遍所有可能——密钥空间的大小由密钥长度决定,密钥每加一位,破解时间翻一倍。

📝 本节和前面几节的关系

上一节留下了破绽:密钥只有 26 种可能,全试一遍就破。本节把【暴力破解】演示出来,再看密钥长度怎么筑起高墙。

一、暴力破解:最笨也最诚实的攻击

算法公开、密钥未知——攻击者把所有可能的密钥挨个试一遍,看哪个解出有意义的明文; 对凯撒密码亲手试 26 次,几分钟就撞出答案——密钥空间太小是致命伤; 暴力破解永远成立(总有一天试完),防御思路只有一个:把密钥空间大到试不完。

二、密钥长度决定密钥空间

密钥本质是一串二进制位:1 位有 2 种、8 位 256 种、56 位就是 2 的 56 次方——每加一位翻倍; 2 的 56 次方约 7 千亿亿次,听起来大?专用算力几天就能翻完——DES 就这么被淘汰的; AES-128 的密钥空间约 3.4×10 的 38 次方——用全球算力也得算上亿年,密钥长度就是硬道理。

三、淘汰与升级的军备赛

算法没变、数学没输——输给的只是算力增长:DES 56 位撑了二十多年; 今天的标准是 AES-128/256:128 位在可预见的算力增长下依然安全; 【⚠️ 2026 现状】量子计算机对【因数分解类】算法是大威胁(威胁的是 10.4 的 RSA),对对称加密的冲击较小——后量子密码已是活跃的研究方向。

四、动手 Demo:暴力破解凯撒密码全记录

对密文 KHOOR 把 26 种错开位数全部试一遍,亲眼看看暴力破解怎么命中。

cipher = "KHOOR"
for k in range(26):
    cand = "".join(chr((ord(c) - ord("A") - k) % 26 + ord("A")) for c in cipher)
    print(k, cand)

实跑输出:

--------------------------------------------------------------------
密钥越长,解密越困难
--------------------------------------------------------------------

拿不到密钥就暴力试! 拿上一节的密文 KHOOR, 把 26 种错开位数全试一遍:

    [暴力破解现场]
        错开  0 位: KHOOR
        错开  1 位: JGNNQ
        错开  2 位: IFMMP
        错开  3 位: HELLO  <- 命中!
        错开  4 位: GDKKN
        错开  5 位: FCJJM
        错开  6 位: EBIIL
        错开  7 位: DAHHK
        错开  8 位: CZGGJ
        错开  9 位: BYFFI
        错开 10 位: AXEEH
        错开 11 位: ZWDDG
        错开 12 位: YVCCF
        错开 13 位: XUBBE
        错开 14 位: WTAAD
        错开 15 位: VSZZC
        错开 16 位: URYYB
        错开 17 位: TQXXA
        错开 18 位: SPWWZ
        错开 19 位: ROVVY
        错开 20 位: QNUUX
        错开 21 位: PMTTW
        错开 22 位: OLSSV
        错开 23 位: NKRRU
        错开 24 位: MJQQT
        错开 25 位: LIPPS

凯撒密码的密钥空间只有 26, 人工几分钟就翻完——太短了!
密钥每加一位, 试完所有可能的时间翻倍, 这就是【密钥越长解密越困难】:

  加密方式        密钥空间              密钥长度
  ----------------------------------------------------
  凯撒密码        26 种                 约 5 位二进制
  DES(已淘汰)     2^56 ≈ 7×10^16        56 位
  AES-128         2^128 ≈ 3.4×10^38     128 位

【⚠️ 2026 现状】DES 已被暴力破解淘汰; AES-128 用全球算力也得算上亿年——密钥长度就是硬道理。

26 行输出里有一行是 HELLO——那就是命中:密钥空间 26 意味着最多 26 次必破。 把范围放大:密钥 56 位是 7.2×10 的 16 次方种——空间每加一位,这张表就长一倍。

30 秒实验

  1. 算一算密钥从 56 位升到 57 位、64 位,密钥空间分别翻了多少倍。
  2. 解释【暴力破解永远成立,为什么人们还是敢用加密】(空间大到时间不可接受)。

常见误区

  1. 以为加密被破是算法被攻破——多数淘汰案例只是密钥太短,算力翻墙而过。
  2. 以为密钥长就万无一失——长度防暴力破解,密钥保管不善、实现漏洞照样出事。
自测三问(点开对答案) 1. 暴力破解的思路? —— 把所有可能的密钥挨个试,直到解出有意义的明文。 2. 密钥长度和破解难度的关系? —— 每加一位,密钥空间翻倍、破解时间翻倍。 3. DES 为什么被淘汰? —— 56 位密钥空间被现代算力暴力翻完——算法本身没被数学攻破。

相关笔记