一、凯撒密码
-
什么是凯撒密码
凯撒密码是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推。

-
凯撒密码的加密/解密过程
1、用凯撒密码加密,密钥是3

2、用凯撒密码解密,密钥也是3

-
暴力破解凯撒密码
在凯撒密码中,密钥就是字母表平移的数字。由于字母表只有26个字母,因此加密用的密钥只有0到25共26种(平移0个字母实际相对于没有加密)。按顺序将这26种密钥都尝试一遍。
二、序列密码
主要特点:将明文和秘钥进行异或运算
例如:明文a,ASCLL为97,二进制为01100001;秘钥B,ASCLL为66,二进制为01000010
然后按位异或
明文
|
0
|
1
|
1
|
0
|
0
|
0
|
0
|
1
|
秘钥
|
0
|
1
|
0
|
0
|
0
|
0
|
1
|
0
|
密文
|
0
|
0
|
1
|
0
|
0
|
0
|
1
|
1
|
缺点:1、秘钥长度与明文长度一致,比如加密20M的明文,需要20M的秘钥
2、序列密码容易篡改
应用场景:通常用于传输协议中,如:RC4是最常用的流密码之一
三、分组密码
-
ECB模式(电子密码本模式)
ECB模式是将明文消息分成固定大小的分组,当最后一个分组的内容小于分组长度时,需要用特定的数据进行填充,保证长度等于分组长度。而每个分组的加密和解密是独立的,因此可以进行并行操作。

计算方法:1、默认模式,数据按照8个字节一段进行加密或解密,得到一段8个字节的密文或明文
2、若最后一段不足8个字节,则补足8个字节进行计算
3、完成之后,按照顺序将计算所得的数据连在一起,各段数据之间互不影响
PKCS7Padding(PKCS5Padding)填充方式:为.net和java的默认填充方式,具体如下:
1、加密数据字节长度对8取余为r
2、如果 r>0,则补 8-r 个字节,字节的值为 8-r
3、如果 r=0,则补8个字节8
加密字符串为AAA,则补位为AAA55555 8-3=5 >0,补5个字节,字节值为5
加密字符串为BBBBBB,则补位为BBBBBB22 8-6=2 >0,补2个字节,字节值为2
加密字符串为CCCCCCCC,则补位为CCCCCCCC88888888 8-8=0 =0,补8个字节,字节值为8
|
-
CBC模式(密码分组连接模式)
CBC模式中的第一个分组需要用初始化向量IV(一个随机且长度为一个分组长度的比特序列)进行异或操作,再进行加密,而后面的每一个分组都要先和前一个分组加密后的密文分组进行异或操作,然后再加密。

需要注意的几点:
1、加密是连续的,不能进行并行操作
2、无法单独对中间的一个明文分组加密
3、对初始化向量没有加密
4、当CBC模式中的密文分组有一个分组损坏,只要密文分组的长度没有发生变化,解密时,最多有两个分组受到数据损坏的影响
5、当CBC的密文分组中有一些比特缺失,导致密码分组的长度发生变化,从而此分组发生错位,在缺失比特位置之后的密文分组将无法全部解密
-
CFB模式(密文反馈模式)
CFB模式是将前一个分组的密文加密后,和当前分组的明文进行异或操作,生成当前分组的密文。
需要注意的是,第一个明文分组通过初始化向量IV进行加密后,再与之进行异或操作,得到第一个密文分组。


CFB模式中有密码算法产生的比特序列,称为秘钥流(在CFB模式中,密码算法相当于伪随机数生成器)
在CFB中,分组密码算法在解密时,仍执行加密操作(因为密钥流通过加密生成)
对CFB模式可实施重放攻击
-
OFB模式(输出反馈模式)
OFB模式是通过将明文分组和密码算法的输出,进行异或操作,产生密文分组,也需要初始化向量IV
密码算法的输出会反馈到密码算法的输入中,并非通过密码算法加密明文分组的,而通过将明文分组和密码算法的输出进行异或来产生密文分组

CFB模式与OFB模式的区别:
CFB是对密文分组进行反馈,必须按顺序进行加密
OFB是对密钥流进行加密,生成密钥流与异或运算可并行
-
CTR模式(计数器模式)
在CTR模式中,每次加密时,都会生成一个不同的值来作为计数器的初始值,每个分组对应一个逐次累加的计数器,通过对计数器进行加密,生成密钥流,再将密钥流与明文分组进行异或操作,得到密文分组


四、分组密码的优缺点
模式
|
优点
| 缺点 |
备注
|
ECB模式
|
简单
快速
支持并行运算(加密、解密)
|
明文中的重复排列,反映在密文中
通过删除、替换密文分组,可以对明文进行操作
对包含某些比特错误的密文进行解密时,对应的分组会出错
不能抵御重放攻击
|
不应使用
|
CBC模式
|
明文的重复排列,不会反映在密文中
支持并行运算(仅解密)
能够解密任意密文分组
|
对包含某些比特错误的密文进行解密时,第一个分组的全部比特以及后一个分组的相应比特会出错
加密不支持并行运算
|
CRYPRTREC推荐
《应用密码学》推荐
|
CFB模式
|
不需要填充
支持并行运算(仅解密)
能够解密任意密文分组
|
对包含某些比特错误的密文进行解密时,第一个分组的全部比特以及后一个分组的相应比特会出错
加密不支持并行运算
|
CRYPRTREC推荐
|
OFB模式
|
不需要填充
可事先进行加密、解密的准备
加密、解密使用相同结构
对包含某些比特错误的密文进行解密时,只有明文中相对应的比特会出错
|
不支持并行运算
主动攻击者反转密文分组中的某些比特时,明文分组中相对应的比特也会被反转
|
CRYPRTREC推荐
|
CTR模式
|
不需要填充
可事先进行加密、解密的准备
加密、解密使用相同结构
对包含某些比特错误的密文进行解密时,只有明文中相对应的比特会出错
支持并行运算(加密、解密)
|
主动攻击者反转密文分组中的某些比特时,明文分组中相对应的比特也会被反转
|
CRYPRTREC推荐
《应用密码学》推荐
|