密码学简介
现代网络存在的问题
- 数据窃取
- 数据篡改
- 身份伪装
对称加解密三要素
-
加密
- 明文
- 算法
- 秘钥
-
解密
- 密文
- 算法
- 秘钥
对称加密与非对称加密的区别
-
对称加密
- 加密解密使用同样的秘钥
- 加密解密算法不一定相同
-
非对称加密
- 加密解密使用的是两把钥匙
对称加密算法
凯撒密码
凯撒密码是一种简单的对称加密算法
通过平移得到密文
明文:hello world
算法:向右平移
秘钥:3
密文:khoor zrug
算法:向左平移
秘钥:3
对称加密算法
DES
特点:
- 已经不适用了,不安全
- 秘钥长度:
8字节
(64位),每7位提供一个校验位。 - 对大的文件进行分组切割,分组长度:
8字节
- 如果分组长度不足8字节需要填充
3DES
特点:
- 进行3次des
- 加密过程:
- 加密-》解密-》加密
- 以解密为加密手段,目的是为了和DES兼容
- 解密过程:
- 解密-》加密-》解密
- 过渡的算法
- 安全,可以使用
- 秘钥长度:
8 * 3 = 24字节
- 分组长度:
8字节
(与DES相同) - 三个秘钥的关系:(了解)
- 秘钥1 与秘钥2相同,或者秘钥2与秘钥3相同。相当于DES(兼容)
- 如果秘钥1与秘钥3不同,3DES-EDE3
- 如果秘钥1与秘钥3相同同,3DES-EDE2
AES
特点:
- 主流算法(推荐)
- 秘钥:
128(16字节),192(24字节),256位(32字节)
- 分组:
16字节
(128比特) - 加密效率高,更加安全
算法 | 秘钥长度 | 分组 | 备注 |
---|---|---|---|
DES | 8 | 8 | 需要填充(不建议使用) |
3DES | 24 | 8 | 可以使用 |
AES | 16,24,32 | 16 | 推荐使用 |
五种分组模式
- ECB模式:Electronic Code Book mode(电子密码本模式)
- CBC模式:Cipher Block Chaining mode(密文分组链接模式)
- CFB模式:Cipher FeedBack mode(密文反馈模式)
- OFB模式:Output FeedBack mode(输出反馈模式)
- CTR模式:CounTeR mode(计数器模式)
ECB模式
-
对明文进行切割,具体分组长度由算法决定
-
对每一个明文分组进行单独加密
-
高效
-
输入规律的数据,可以得到规律的输出,不安全
-
由于直接对分组进行加密,所以需要填充
-
不要使用ECB模式
填充思路
最后差几位就填充几位几,比如差3位就填充3个3,不差就填充8个8(因为解密时并不知道要不要去掉最后的值,所以一律都添加)
CBC模式
-
分组,长度与算法相同
-
需要填充
-
后一个分组的输入来自于前一个分组的加密结果
这样就可以避免输入规律的数据得到规律的数据,更加安全
-
不能并行加密。
-
先异或,再加密
-
需要额外提供一个初始化向量(IV:init vector)
要求:iv的长度,与分组长度一致(DES:8bytes,AES:16字节)
异或加密
- 与&
8:0000,1000
9:0000,1001
&–》0000,1000–》8
- 或|
8:0000,1000
9:0000,1001
|–》0000,1001–》9
- 异或^ 相同为0,不同为1(同龄人)
8:0000,1000
9:0000,1001
^–》0000,0001–》1
- 加密过程:
明文:8
算法:异或
秘钥:9
密文:1
- 解密过程
密文:1
算法:异或
秘钥:9
明文:8
异或加密,秘钥相同,算法相同
CFB模式
-
分组,长度与算法相同
-
不需要填充
-
后一个分组的输入来自于前一个分组的加密结果
这样就可以避免输入规律的数据得到规律的数据,更加安全
- 不能并行加密。
- 先加密,后异或
- 需要额外提供一个初始化向量(IV:init vector)
要求:iv的长度,与分组长度一致(DES:8bytes,AES:16字节)
OFB模式
-
分组,长度与算法相同
-
不需要填充
-
反复对初始化向量进行加密,得到数据作为下一个分组的输入
-
需要额外提供一个初始化向量(IV:init vector)
要求:iv的长度,与分组长度一致(DES:8bytes,AES:16字节)
CTR模式
- 需要提供一个数字,每一个分组都会加一
- 可以并行的加解密
- 推荐使用
对比