现代密码学入门:从凯撒密码到完美加密
本文最后更新于49 天前,其中的信息可能已经过时,如有错误请发送邮件到442414706@qq.com或添加QQ好友3415930176反馈

现代密码学入门:从凯撒密码到完美加密

以克劳德·香农 1949 年的论文为界,密码学分为两个截然不同的世界。

古典密码学,以替换密码为核心,从 2000 年前的凯撒密码一路走来,至今仍是各类解密游戏中的常客
我们熟悉的摩斯密码,以及许多影视作品中出现的“密语”(如《原神》和《凹凸世界》中的虚构文字),本质上都是替换密码的变体

Pasted image 20251014052233.png

Pasted image 20251014052333.png

现代密码学,一提起它大家就会想到RSA等充满复杂数学运算的算法
(原本古代只是替换掉,就没人能破解了,现如今要从↑,变成↓这种?)

Pasted image 20251014061952.png

从表面上看,这场革命似乎把密码学大厦的地基整个掀翻重来了
(那… 物理学大厦的两片乌云——“量子力学“和“相对论“都算小修小补?)

不过,现代密码学的地基,是一件非常简单、却被所有人忽略了快 2000 年的事

一、凯撒密码:古典密码的起点

Q:“要真的所有“替换密码”,都像摩斯密码一样,背不下来怎么办“
A:“有一个比较好记的方法,凯撒密码”

什么是凯撒密码?

凯撒密码的基本原理很简单:把每个字母在字母表中向后移动固定的位数。

首先,我们需要一个字母-数字对应表:

字母 数字 字母 数字 字母 数字
A 0 J 9 S 18
B 1 K 10 T 19
C 2 L 11 U 20
D 3 M 12 V 21
E 4 N 13 W 22
F 5 O 14 X 23
G 6 P 15 Y 24
H 7 Q 16 Z 25
I 8 R 17

加密公式密文数字 = (明文数字 + 偏移量) mod 26

备注:
mod 是 “取模运算” 的缩写,你可以把它通俗地理解为 “求余数” 或者 “时钟算术”
就相当于 12 小时制度:现在是上午 6 点,过了 7 个小时之后,则是下午 1 点,是循环

举例来说,ABCD,每个字母向后移动 3 位:

  • A (0) → (0+3)=3 → D
  • B (1) → (1+3)=4 → E
  • C (2) → (2+3)=5 → F
  • D (3) → (3+3)=6 → G

这样,”ABCD”就加密成了”DEFG”

OK,到现在为止,你已经可以在日常使用,加密信息不泄露了

如何破解凯撒密码?

方法一:暴力穷举
由于只有 26 种可能的偏移量,计算机(甚至人工)可以轻松尝试所有可能,从中找出有意义的原文
(反正一共 26 种,只要都尝试一便,可以算出来的)
先加密一遍love,向后都推 5 位,变成qtaj
加密过程:

l (11) → +5 → 16 → q
o (14) → +5 → 19 → t  
v (21) → +5 → 26 → 0 → a
e (4)  → +5 → 9  → j

暴力穷举(节选):

偏移量 0: qtaj
偏移量 1: pszi
偏移量 2: oryh
...
偏移量 5: love  ← 找到
...
偏移量 25: rubk

方法二:频率分析法(更优雅的方法)
在任何语言中,字母的出现频率都有固定规律。英语中,E、T、A出现的频率最高。通过分析密文中字母的频率分布,就能反推出偏移量

二、完美的加密:被忽视 2000 年的真相

一个有趣的发现

当密文很短时,凯撒密码会展现出一个神奇的特性

单词”sleep”和”bunny”经过凯撒加密后,会产生完全相同的 26 种可能密文!也就是说:
{“sleep”的所有可能密文} = {“bunny”的所有可能密文}

具体来看:

  • 偏移 3 时:”sleep” → “vohhs”;”bunny” → “exqqb”(不同)
  • 偏移 20 时:”sleep” → “hyyzk”;”bunny” → “vohhs”(相同!)

攻击者的困境:如果你截获了密文”vohhs”,即使尝试所有 26 种密钥,你会发现:

  • 用密钥 3 解密得到”sleep”
  • 用密钥 20 解密得到”bunny”

你没有任何方法判断哪个才是真正的原文

(当然,密钥很长的话,就能根据上下文推理得出了……)

Pasted image 20251014063023.png

完美加密的兔子(bunny=小兔子,sleep=睡觉)

现代密码学的核心思想

完美加密不依赖密文没有规律,而依赖于不同的明文产生的密文无法区分。

只要攻击者无法从密文中找到任何可以用来区分不同明文的”痕迹”,加密就是绝对安全的
这就是被忽视了近 2000 年的密码学真谛

三、实战演练

场景一:单次密码簿的完美加密

如果我想要绝对安全地发送”I LOVE YOU”,可以使用单次密码簿方案:对每个字母独立使用凯撒密码,密钥与明文等长

我选择密钥:20090705

加密过程:

明文 I L O V E Y O U
明文数字 8 11 14 21 4 24 14 20
密钥数字 2 0 0 9 0 7 0 5
密文数字 10 11 14 4 4 5 14 25
密文 K L O E E F O Z

“I LOVE YOU” → “KLOEEFOZ”

不知道密钥的人,即使拿到密文也绝对无法破解
这就是完美加密

但缺点也很明显,对方必须要知道密钥,但如果传递的话… 为什么不直接把明文告知对方,已经交到手上了
传递是可以被截获的
(但表白这种是…. 比较隐晦,确实可以加密一下)

场景二:频率分析法破解浪漫表白

假设你收到一段密文:

QSZZI EZ OZME ZQZM XZPCDMZOD RCDMZOD JT YZJP XZPCDMZOD

步骤 1:统计频率
发现字母Z出现的频率高达 23.1%,远高于其他字母。

步骤 2:匹配猜测
英语中最常见的字母是E,猜测Z对应E,推算偏移量为 21。

步骤 3:尝试解密
用偏移量 21 解密,得到混乱的结果,说明猜测错误。

步骤 4:系统尝试
通过程序尝试所有 26 种偏移量,发现偏移量为 14 时得到有意义的英文:

“LOVING YOU IS THE MOST BEAUTIFUL THING I HAVE EVER EXPERIENCED IN MY LIFE”

浪漫的表白就这样被破解了

四、从完美到实用:现代密码学的演进

完美的,但也是无用的?

这是一个真实的历史故事,记载于古希腊历史学家希罗多德的《历史》中

  • 主角:米利都的僭主希斯塔泰乌斯
    公元前 5 世纪,希斯塔泰乌斯被波斯国王大流士软禁在苏萨城,他想秘密送信给他在米利都的女婿阿里斯塔格拉斯,怂恿他发动叛乱
    但是,如何让信使穿过重重关卡,而不被波斯守卫发现密信?
  • 妙计
    1. 他找来了一个最信任的奴隶
    2. 将奴隶的头发全部剃光
    3. 用墨水将消息直接纹在奴隶的头皮上
    4. 等待奴隶的头发重新长出来,完全覆盖了头皮上的信息
  • 在送信的时候,这个“长了头发”的信使就这样安然无恙地穿过了所有检查,顺利抵达米利都
  • 见到阿里斯塔格拉斯后,奴隶再次剃光头发,头皮上的密信便重现天日
    这个故事的本质,它解决的并非“加密”,而是“隐写”——即隐藏信息本身的存在。它用一种戏剧性的方式,揭示了密码学中一个比加密本身更根本的挑战:如何安全地将密钥(或信息)传递给对方?

单次密码簿的困境

虽然单次密码簿绝对安全,但有个致命缺陷:密钥长度必须等于明文长度。如果你能安全地把密钥送出去,为什么不直接把消息送出去呢?

(如果是用于表白,对方知道凯撒密码,且知道密钥是她生日….. 这也有些难度,安全性虽不完美,但情趣满分)

这就造成了”能用的加密方案不安全,安全的加密方案不能用”的尴尬局面

“如果你想用‘单次密码簿’绝对安全地加密一本《战争与和平》,你就需要一本同样厚的密码本。你怎么把这本密码本送给盟友呢?难道要像希斯塔泰乌斯那样,找一群人来剃光头,把密码本纹在他们头上,等几年后头发长出来再派过去吗?”

公钥加密的智慧妥协

现代密码学找到了一条中间道路:单向函数

这种函数的特点是:正向计算容易,反向推倒极其困难。RSA算法就是基于这个原理

公钥加密方案

  • 公钥:公开的单向函数,任何人都可以用来加密
  • 私钥:只有接收者掌握的”暗门”,用来解密
  • 安全性建立在当前算力无法在合理时间内破解的基础上

两种加密的哲学对比

  • 私钥加密:安全性建立在密钥的随机性上,理论上绝对安全
  • 公钥加密:安全性建立在人类当前算力局限上,理论上可破解,实际上不可行

五、密码学的星辰大海

现代密码学远不止加密解密,还包括:

  • 伪随机数:如何生成真正的随机
  • 零知识证明:如何证明你知道秘密,却不泄露任何信息
  • 哈希函数:数据的数字指纹

所有这些技术都有一个共同的核心:在达成目标的同时,不泄露任何额外信息

本文章由夜明视政编辑

评论


  1. Warning: A non-numeric value encountered in /www/wwwroot/mnbt.19168339e5/wp-content/plugins/yaya-comment-ip/ip-data/ip2c.php on line 13

    Warning: Undefined array key 1 in /www/wwwroot/mnbt.19168339e5/wp-content/plugins/yaya-comment-ip/ip-data/ip2c.php on line 13

    Warning: Undefined array key 2 in /www/wwwroot/mnbt.19168339e5/wp-content/plugins/yaya-comment-ip/ip-data/ip2c.php on line 13

    Warning: Undefined array key 3 in /www/wwwroot/mnbt.19168339e5/wp-content/plugins/yaya-comment-ip/ip-data/ip2c.php on line 13
    Android Chrome
    Unknown
    2 月前
    2025-10-14 15:53:19

    通俗易懂,清新明快。
    不过私以为密文常现于两股不同的势力,加密是必然的,因为无法确定是否能安全传递,传递过程中也无法确定有无背叛者,信息的最终接收者必然拥有密钥和正确的解密步骤,截获者破解需要时间,凭借庞大且复杂的情报网可提前做出信息泄露的应对……现代人利用已被公开破解的加密方式玩情趣本无可厚非,但不能因此扰乱自身的判断,评判一件事物要把它放在最开始被发明出来时的环境去看。
    注:白璧微瑕。

    • 夜明视政
      博主
      Android Chrome
      山东省 移动/全省通用
      2 月前
      2025-10-15 3:40:35

      !谢谢苏姐姐,确实没有考虑当时被发明出来的场景,以今度古,用现代标准去妄议古人的错误做法
      十分感谢,之后会注意这个问题的(真的好厉害)

  2. AdMin_Su

    Warning: A non-numeric value encountered in /www/wwwroot/mnbt.19168339e5/wp-content/plugins/yaya-comment-ip/ip-data/ip2c.php on line 13

    Warning: Undefined array key 1 in /www/wwwroot/mnbt.19168339e5/wp-content/plugins/yaya-comment-ip/ip-data/ip2c.php on line 13

    Warning: Undefined array key 2 in /www/wwwroot/mnbt.19168339e5/wp-content/plugins/yaya-comment-ip/ip-data/ip2c.php on line 13

    Warning: Undefined array key 3 in /www/wwwroot/mnbt.19168339e5/wp-content/plugins/yaya-comment-ip/ip-data/ip2c.php on line 13
    iPhone Safari
    法国 Orange
    2 月前
    2025-10-19 0:41:34

    线下物理加密 密钥多次加密 基本上就能杜绝被破解的问题。
    或者直接通过提前预定的哈希运算蜜罐来阻挡量子计算机的暴力突破。
    有秘密,就会有密码。

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇