凯撒密码以朱利叶斯·凯撒(Julius Caesar)(公元前 100 年至公元前 44 年)的名字命名,他将其用于秘密军事通信。凯撒密码是一种替代密码。朱利叶斯·凯撒最初使用三移来加密和解密消息。使用仿射函数进行加密:f(x)=x+b。
首先,将初始文本(要加密的消息)的每个字符转换为 0 到 25 之间的数字,对应于其在包含 26 个字母的拉丁字母表中的位置 --> (a = 0, b = 1 ... z = 25 )。
然后,通过仿射函数 (f(x) = 1x + b) 对获得的每个数字进行变换。 “x”代表数字,“b”是在加密过程中定义的。 “b”是用于解密最终消息的密钥。
如果我们将所有图像放入一个列表中,我们将获得与初始文本的 n 个字符相对应的 n 个数字。下一步是找到每个数字的模 26 值。 (模表示余数)
示例:19 的模 4 为3 ,因为
19 = 4 * 4 + 3
另一方面,26 的模 26 为0 ,因为26 = 26 * 1 + 0
因此,我们得到一个包含 n 个元素的新列表,每个元素都包含在 0 到 25 之间。所有这些数字都使用下表转换为拉丁字母。
我们最终通过将所有字母并排放置来创建最终消息。
步骤 1 和 4 可以使用以下表格完成:
一个 | 乙 | C | D | 乙 | F | G | H | 我 | J | K | L | 中号 | 氮 | 氧 | 磷 | 问 | 右 | S | 时间 | U | V | 瓦 | X | 是 | Z |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 号 | 18 | 19 | 20 | 21 | 22 号 | 23 | 24 | 25 |
如果攻击者知道消息已使用凯撒密码加密,他可以尝试所有移位(b 值从 1 到 25)来解密消息。这称为暴力破解法。
我们还可以使用频率分析来解密消息,因为每个字母都使用相同的算法加密,最常见的英语字母是:
使用上表, ATTACK可以写为: 25 0 19 19 0 2 10 25每个数字的图像:
新列表为: 29 4 23 23 4 6 14 29
使用模 26 方法,我们得到:
最终消息是3 4 23 23 4 6 14 3并再次使用这些表,我们将它们转换为加密消息:
德克西戈德
ZATTACKZ使用函数x + 4加密并变为DEXXEGOD 。
使用上表, DEXXEGOD可以写为: 3 4 23 23 4 6 14 3每个数字的图像:
新列表为: -1 0 19 19 0 2 10 -1
使用模 26 方法,我们得到:
最终消息是25 0 19 19 0 2 10 25并再次使用这些表,我们将它们转换为加密消息:
攻击力
DEXXEGOD使用函数1x - 4解密并变为ZATTACKZ 。
这称为暴力法。
使用上表, DEXXEGOD可以写为: 3 4 23 23 4 6 14 3
a 是 0 到 25 之间的数字。(a = 0 表示消息已解密)
使用函数 f(x) = Mod(1x + a, 26) :
我们可以得到所有这些结果:
一个 | 解密文本 |
---|---|
1 | 飞哥 |
2 | 加哈吉格 |
3 | 希比克什 |
4 | 伊吉西吉利蒂 |
5 | 吉克德克穆吉 |
6 | 克莱恩克 |
7 | LMFF莫尔 |
8 | 米格尼帕克斯姆 |
9 | 诺霍钦 |
10 | 阿片类药物 |
11 | pqjjqsap |
12 | qrkkrtbq |
13 | 糖糖 |
14 | 电视节目 |
15 | 通努韦特 |
16 | 乌沃夫克斯夫 |
17 号 | 病毒 |
18 | 呜呜呜 |
19 | 西里耶克斯 |
20 | yzsszbjy |
21 | 扎塔克兹 |
22 号 | 阿布卜德拉 |
23 | BCVVCemb |
24 | cdwwdfnc |
25 | 德克斯戈德 |
唯一有意义的文本是 zattackz,因此我们可以推断出密钥是 21 (25 - b = 21)。
DEXXEGOD使用函数f(x) = 1x - 4或f(x) = 1x + 21解密并变为ZATTACKZ 。
语言 | 加密 | 解密 |
---|---|---|
C | 凯撒.c | 即将推出 |
C# | 凯撒.cs | 即将推出 |
C++ | 主程序 | 主程序 |
JavaScript | 加密.js | 解密.js |
Python | 加密.py | 解密.py |
迅速 | Swift 库 | Swift 库 |
npm i @cryptoolsorg/caesarcipher