对称加密算法常用的五种分组模式(ECB/CBC/CFB/OFB/CTR) - Go语言中文社区

对称加密算法常用的五种分组模式(ECB/CBC/CFB/OFB/CTR)


Q:为什么需要分组模式?
A:明文的长度不固定,而分组密码只能处理特定长度的一块数据,这就需要对分组密码的算法进行迭代,以便将一段很长的明文全部加密,而迭代的方法就是分组的模式。

一图全览五种分组模式

常用分组模式全览
五种模式详解
1. ECB - Electronic Code Book, 电子密码本模式

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

ECB模式图解

2. CBC - Cipher Block Chaining, 密码块链模式(推荐使用)

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

CBC模式的加密

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

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

CFB模式加密

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

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

OFB分组模式

5. CTR - CounTeR, 计数器模式(重点,推荐使用)

特点: 密文没有规律, 明文分组是和一个数据流进行的按位异或操作, 最终生成了密文
不需要初始化向量
go接口中的iv可以理解为随机数种子, iv的长度 == 明文分组的长度
不需要填充
这里我们有必要给出CTR模式额解密流程,因为CTR模式的解密和加密是一模一样的过程,在程序实现中也是可逆的,具体程序在文章实现底部有链接

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

 

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/ayang1986/article/details/105690743
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2021-06-14 02:11:56
  • 阅读 ( 630 )
  • 分类:算法

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢