密码学(上)
密码学笔记
1.加密三要素
- **,密文,加密算法
PS:对称加密,非对称加密
- 对称加密
- 特点:简单,效率高,加密强度低,加密和解密的**是相同的
- 使用场景:应用于大文件,大数据加密
- 缺点:**分发困难
- 非对称加密
- 特点:效率低,加密强度高,**对,对应公钥加密,对应的私钥解密
- 使用场景:针对少量数据。(消息认证,签名)
- 公钥:可以公开获取
- 私钥:私密保存,越少人知道越好
- 优点:**分发容易
- 缺点:无法快速处理大数据
2.最早的加密方式————>凯撒密码——>将明文按照一定的字数进行“平移”的方式加密
3.密码信息安全常识:
- 不要使用保密的密码算法
- 使用低强度的密码比不进行任何加密更加危险
- 任何密码终有一天会被**
- 密码只是信息安全的一部分
4.DES加密——对称加密(不安全)
- DES的**长度是64比特,但由于每隔7比特会设置一个用于错误检查的比特,因此实质上其**长度是56 比特。
- 加密和解密的**是相同的
- 分组长度:8byte=64bit
5.3DES——三重DES加密(安全)
- 将DES重复三次所得到的一种密码算法
- 每一次加密的**都不相同,一共三个不同**
- 同时兼容DES,只要三个**都相同,就是普通的DES
6.AES加密——对称加密(更安全)
- 在AES中,**长度只有128,192(24byte),256bit三种,go语言中只支持16byte
- 分组密码模式,最后一个分组,采用缺几补几的方式填充。对于刚好整除的,补分组数据长度(16byte)
- 按位 异或 加密 (XOR)
7.分组密码模式(5种)
- EBC
- 特点:简单,效率高,密文有规律,容易**
- 最后一组明文分组要填充
- DES,3DES(8byte)
- ADE(16byte)
- 不需要初始化向量
-
CBC (重点)
- 特点:效率略低,密文无规律,不容易**,推荐使用
- 最后一组明文必须填充
- 需要初始化向量
- 初始化向量长度==分组数据长度
- 加密解密使用的是同一个初始化向量
- 加密者提供初始化向量
- CFB
- 特点:密文无规律,将初始化向量借助**加密,生成一个**流(数据流), 用明文分组与**流异或得到密文
- 最后一个明文分组,不需要填充
- 需要初始化向量
- 初始化向量长度==分组数据长度
- 加密解密使用的是同一个初始化向量
- 加密者 提供 初始化向量
- OFB (了解)
- 逐层加密初始化向量,而CFB是将上一级的密文当作本层的初始化向量
- 其他内容跟CFB一致,直接看图
-
- **CTR(重点)**推荐使用
- 特点:密文无规律,将 计数器+随机数 借助**加密,生成一个**流(数据流), 用明文分组与**流异或得到密文
- 最后一个明文分组 不需要填充。
- 不需要初始化向量
- Go语言中 IV 不是初始化向量,对应一个 随机数种子。 大小 == 分组数据长度。
-
总结:
- 最后一个明文分组的填充
- ECB、CBC分组密码模式需要填充
- CFB、OFB、CTR分组密码模式 不需要填充
- 初始化向量 - IV — 一个数组 (切片)
- ECB、CTR 分组密码模式 不需要
- CFB、OFB、CBC 分组密码模式 需要
- 数据长度:== 分组长度。(受加密算法影响)
- des、3des --> 8byte = 64bit
- AES --> 16byte = 128bit
- 数据长度:== 分组长度。(受加密算法影响)
- 最后一个明文分组的填充