密码学(上)

密码学笔记

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