对称加密的五种分组算法 - Mr.Ding

对称加密的五种分组算法

天天记事 564 / 2021-09-17 13:11:19

常见的对称加密有AES、DES、3DES以及国密SM4,在使用这些加密算法加密时会根据实际场景选取不同的加密模式,通常这些模式有ECB、CBC、CFB、OFB、CTR和GCM等,掌握这些模式必然是很重要的。

模式清单

1. ECB(Electronic Code Book), 电子密码本模式

  • 特点: 简单, 效率高, 密文有规律, 容易被破解
  • 最后一个明文分组必须要填充
  • des/3des -> 最后一个分组填充满8字节
  • aes -> 最后一个分组填充满16字节
  • 不需要初始化向量


2. CBC(Cipher Block Chaining), 密码块链模式

  • 特点: 密文没有规律, 经常使用的加密方式
  • 最后一个明文分组需要填充
  • des/3des -> 最后一个分组填充满8字节
  • aes -> 最后一个分组填充满16字节
  • 需要一个初始化向量 - 一个数组
  • 数组的长度: 与明文分组相等
  • 数据来源: 负责加密的人的提供的
  • 加解密使用的初始化向量值必须相同


3. CFB(Cipher FeedBack), 密文反馈模式

  • 特点: 密文没有规律, 明文分组是和一个数据流进行的按位异或操作, 最终生成了密文
  • 需要一个初始化向量 - 一个数组
  • 数组的长度: 与明文分组相等
  • 数据来源: 负责加密的人的提供的
  • 加解密使用的初始化向量值必须相同
  • 不需要填充


4. OFB(Output-Feedback), 输出反馈模式

特点: 密文没有规律, 明文分组是和一个数据流进行的按位异或操作, 最终生成了密文
需要一个初始化向量 - 一个数组
数组的长度: 与明文分组相等
数据来源: 负责加密的人的提供的
加解密使用的初始化向量值必须相同
不需要填充


5. CTR(CounTeR), 计数器模式

  • 不需要初始化向量
  • go接口中的iv可以理解为随机数种子, iv的长度 == 明文分组的长度
  • 不需要填充
  • 这里我们有必要给出CTR模式额解密流程,因为CTR模式的解密和加密是一模一样的过程,在程序实现中也是可逆的,具体程序在文章实现底部有链接



通过对比发现CTR加密即解密,解密即加密,且各分组之间是独立的,可以并发完成,效率高。


总结
以上五种分组模式中,ECB模式很容易被破解,如今已经很少再使用,其余四种分组模式各有千秋。
但极力推荐CBC模式和CTR模式,尤其是CTR模式,不需要填充,代码实现起来很方便。而且加密和解密的方法是一样的,并且可以实现并发分组,效率高,安全性也有保障