古典密码学

单表代换加密

凯撒密码

凯撒密码(Caesar)加密时会将明文中的 每个字母 都按照其在字母表中的顺序向后(或向前)移动固定数目(循环移动)作为密文。

此外,还有还有一种基于密钥的凯撒密码 Keyed Caesar。其基本原理是 利用一个密钥,将密钥的每一位转换为数字(一般转化为字母表对应顺序的数字),分别以这一数字为密钥加密明文的每一位字母。

密文:s0a6u3u1s0bv1a 
密钥:guangtou
偏移:6,20,0,13,6,19,14,20
明文:y0u6u3h1y0uj1u

移位密码

与凯撒密码类似,区别在于移位密码不仅会处理字母,还会处理数字和特殊字符,常用 ASCII 码表进行移位。其破解方法也是遍历所有的可能性来得到可能的结果。

Atbash Cipher

埃特巴什码(Atbash Cipher)其实可以视为下面要介绍的简单替换密码的特例,它使用字母表中的最后一个字母代表第一个字母,倒数第二个字母代表第二个字母。

明文:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
密文:Z Y X W V U T S R Q P O N M L K J I H G F E D C B A
明文:the quick brown fox jumps over the lazy dog
密文:gsv jfrxp yildm ulc qfnkh levi gsv ozab wlt

简单替换密码

有自己的字母表,密钥个数是26!

一般采用词频分析破解

仿射密码

加密函数是

\[E(x)=(ax+b)(mod~m) \]

其中

  • x 表示明文按照某种编码得到的数字
  • a 和 m 互质 (解码的时候需要逆元,而只有互素的情况下才有逆元;互素的情况下才能遍历完全剩余系)
  • m 是编码系统中字母的数目。
明文 A F F I N E C I P H E R
x 0 5 5 8 13 4 2 8 15 7 4 17
y=5x+8y 8 33 33 48 73 28 18 48 83 43 28 93
ymod26 8 7 7 22 21 2 18 22 5 17 2 15
密文 I H H W V C S W F R C P

解密函数是

\[D(x)=a^{−1}(x−b)(modm) \]

其中 a−1 是 a 在 Zm 群的乘法逆元。

密文 I H H W V C S W F R C P
yy 8 7 7 22 21 2 18 22 5 17 2 15
x=21(y−8) 0 -21 -21 294 273 -126 210 294 -63 189 -126 147
xmod26 0 5 5 8 13 4 2 8 15 7 4 17
明文 A F F I N E C I P H E R

仿射密码分析

多表代换密码

加密后的字母几乎不再保持原来的频率。因为一个字母可以被加密成多种密文。

Palyfair

  1. 处理密钥。选取一串英文字母,除去重复出现的字母,将剩下的字母逐个逐个加入 5 × 5 的矩阵内,剩下的空间由未加入的英文字母依 a-z 的顺序加入。注意,将 q 去除将 i 和 j 视作同一字。
  2. 处理明文。将要加密的明文分成两个一组。若组内的字母相同 X(或 Q)加到该组的第一个字母后重新分组。若剩下一个字,也加入 X
  3. 得到密文。在每组中,找出两个字母在矩阵中的地方。
    • 若两个字母不同行也不同列,在矩阵中找出另外两个字母(第一个字母对应行优先),使这四个字母成为一个长方形的四个角
    • 若两个字母同行,取这两个字母右方的字母(若字母在最右方则取最左方的字母)。
    • 若两个字母同列,取这两个字母下方的字母(若字母在最下方则取最上方的字母)。

例子

以 playfair example 为密匙,得

P L A Y F
I R E X M
B C D G H
K N O Q S
T U V W Z

要加密的讯息为 Hide the gold in the tree stump

HI DE TH EG OL DI NT HE TR EX ES TU MP

就会得到

BM OD ZB XD NA BE KU DM UI XM MO UV IF

Polybius

又称为棋盘密码,将给定的明文加密为两两组合的数字

特征

  1. 密文的长度是明文的两倍
  2. 密文通常只由五种不同字符组成

密码表

1 2 3 4 5
1 A B C D E
2 F G H I/J K
3 L M N O P
4 Q R S T U
5 V W X Y Z

明文 HELLO,加密后就是 23 15 31 31 34。

另一种密码表

A D F G X
A b t a l p
D d h o z k
F q f v s n
G g j c u x
X m r e w y

这种密码表也称为ADFGX密码

结合了polybius密码和置换密码的双重加密方案

HELLO,使用这个表格加密,就是 DD XF AG AG DF。

Vigenere维吉尼亚密码

使用一系列凯撒密码组成密码字母表的加密算法

密码表

维吉尼亚表格

特征

加密过程

  1. 处理密钥。将密钥填充至和明文一样长。
  2. 明文和密钥形成字母对,查询表格。

例子

明文:come greatwall 
密钥:crypto

首先,对密钥进行填充使其长度与明文长度一样。

明文 c o m e g r e a t w a l l
密钥 c r y p t o c r y p t o c

其次,查表得密文

明文:come greatwall 
密钥:crypto 
密文:efkt zferrltzn

Nihilist

又称为关键字密码:明文 + 关键字 = 密文。

例子

关键字:helloword

利用密钥构建棋盘矩阵(类似 Polybius)

1 2 3 4 5
1 h e l o w
2 r d a b c
3 f g i / j k m
4 n p q s t
5 u v x y z

特征

  • 纯数字
  • 只包含 1 到 5
  • 密文长度偶数。

HIll

希尔密码(Hill)使用每个字母在字母表中的顺序作为其对应的数字,即 A=0,B=1,C=2 等,然后将明文转化为 n 维向量,跟一个 n × n 的矩阵相乘,再将得出的结果模 26。

注意用作加密的矩阵(即密匙)在 Z^{26}_{n} 必须是可逆的,否则就不可能解码。只有矩阵的行列式和 26 互质,才是可逆的。

例子

明文:ACT

将明文化为矩阵。

\[\begin{bmatrix} 0\\ 2\\ 9 \end{bmatrix} \]

假设密钥为:

\[\begin{bmatrix} 6&24&1\\ 13&16&10\\ 20&17&15 \end{bmatrix} \]

加密过程为:

\[\begin{bmatrix} 6&24&1\\ 13&16&10\\ 20&17&15 \end{bmatrix} \begin{bmatrix} 0\\ 2\\ 9 \end{bmatrix} = \begin{bmatrix} 67\\ 222\\ 319 \end{bmatrix} = \begin{bmatrix} 15\\ 14\\ 7\end{bmatrix} ~mod~ 26 \]

密文:POH

特征

  1. n * n的密钥矩阵代表n个一组进行加密

给出的密钥可能以行或列进行排列,但一定是完全平方数

AutokeyCipher

自动密钥密码。和维吉尼亚类似,但使用不同的方法生成密钥。

自动密钥密码主要有两种,关键词自动密钥密码和原文自动密钥密码。

其他类型加密

培根密码

二进制表示

a AAAAA g AABBA n ABBAA t BAABA
b AAAAB h AABBB o ABBAB u-v BAABB
c AAABA i-j ABAAA p ABBBA w BABAA
d AAABB k ABAAB q ABBBB x BABAB
e AABAA l ABABA r BAAAA y BABBA
f AABAB m ABABB s BAAAB z BABBB

特征

  • 只有两种字符
  • 每一段的长度为 5
  • 加密内容会有特殊的字体之分,亦或者大小写之分。

栅栏密码

栅栏密码把要加密的明文分成 N 个一组,然后把每组的第 1 个字连起来,形成一段无规律的话。

例子

明文:THERE IS A CIPHER
去掉空格:THEREISACIPHER
分成两栏:TH ER EI SA CI PH ER
先取出第一个字母,再取出第二个字母:TEESCPE
							  HRIAIHR
连起来:TEESCPEHRIAIHR

曲路密码

曲路密码(Curve Cipher)是一种换位密码,需要事先双方约定密钥(也就是曲路路径)。

例子

明文:The quick brown fox jumps over the lazy dog

填入 5 行 7 列表(事先约定填充的行列数)

qulu-table

加密的回路线(事先约定填充的行列数)

qulu-road

密文:gesfc inpho dtmwu qoury zejre hbxva lookT

列移位加密

原理

  1. 将明文填入 5 行 7 列表(事先约定填充的行列数,如果明文不能填充完表格可以约定使用某个字母进行填充)
  2. 将密钥在字母表中的出现的先后顺序进行编号。编号作为在密文中的先后顺序。

例子

明文

密钥

密文: qoury inpho Tkool hbxva uwmtd cfseg erjez

01248密码

又称为云影密码,使用0、1、2、4、8五个数字。其中0用来表示间隔,其他数字以加法可以表示出 如:28=10, 124=7, 18=9,再用 1->26表示A->Z

特征

只有0 1 2 4 8

例子

8842101220480224404014224202480122

内容 数字 字符
88421 8+8+4+2+1=23 W
122 1+2+2=5 E
48 4+8=12 L
2244 2+2+4+4=12 L
4 4 D
142242 1+4+2+2+4+2=15 O
248 2+4+8=14 N
122 1+2+2=5 E

JSFuck

BrainFuck

猪圈密码

对照表如下

猪圈密码对照表

我们举一个例子,如明文为 X marks the spot ,那么密文如下

猪圈密码示例

舞动的小人密码

每一个跳舞的小人实际上对应的是英文二十六个字母中的一个,而小人手中的旗子则表明该字母是单词的最后一个字母,如果仅仅是一个单词而不是句子,或者是句子中最后的一个单词,则单词中最后一个字母不必举旗。

舞动的小人密码

键盘密码

手机键盘密码

用两位数字来表示字母。第一个数字是指包含在哪个九键中,第二个数字是指字母集合中在第几个。

picture

电脑键盘加密

棋盘方阵

电脑棋盘加密

电脑键盘坐标

电脑键盘坐标加密

电脑键盘QWE

computer-qwe

键盘布局加密

posted @ 2025-03-03 09:41  Pocon  阅读(193)  评论(0)    收藏  举报