AES CFB/OFB/ECB/CBC/CTR优缺点

不想你离开。 提交于 2020-02-28 17:18:21

AES CFB/OFB/ECB/CBC/CTR优缺点

摘自:http://www.metsky.com/archives/418.html

 

AES常见加密模式有CFB/OFB/ECB/CBC/CTR,本文概述这些算法特点,让大家更快的了解AES,当然天缘也不是专业做算法的,工作中也只是使用到才会学习一点,如有错误,欢迎指出。

一、Cipher feedback(CFB)

CFB算法优点:

同明文不同密文,分组密钥转换为流密码。

CFB算法缺点:

串行运算不利并行,传输错误可能导致后续传输块错误。

二、Output feedback(OFB)

OFB算法优点:

同明文不同密文,分组密钥转换为流密码。

OFB算法缺点:

串行运算不利并行,传输错误可能导致后续传输块错误。

三、Electronic codebook(ECB)

ECB算法优点:

简单、孤立,每个块单独运算。适合并行运算。传输错误一般只影响当前块。

ECB算法缺点:

同明文输出同密文,可能导致明文攻击。我们平时用的AES加密很多都是ECB模式的,此模式加密不需要向量IV。

四、Cipher-block chaining(CBC)

CBC算法优点:

串行化运算,相同明文不同密文

CBC算法缺点:

需要初始向量,不过这其实不算缺点,下文的CTR也是需要随机数的。如果出现传输错误,那么后续结果解密后可能全部错误。

此外,还有Propagating cipher-block chaining(PCBC)加密模式,

五、Counter mode(CTR)

CTR算法优点:

无填充,同明文不同密文,每个块单独运算,适合并行运算。

CTR算法缺点:

可能导致明文攻击。

补充:

关于Padding补位问题,上文加密模式中,比如CBC等对输入块是有要求的,必须是块的整数倍,对不是整块的数据,要求进行填充,填充的方法有很多种,常见的有PKCS5和PKCS7、ISO10126等。

例如按照16字节分组的话:

  • 对不足16字节部分(假设差n个满16字节),填充n个字节(n范围(1,15]),且每字节值均为n。
  • 对正好16字节部分,则填充一个block,也就是补16个字节,每字节值为16

参考1:PKCS #7: Cryptographic Message Syntax

参考2:PKCS #5: Password-Based Cryptography Specification

所以上述算法中,默认:

需要Padding的有:CBC(,PCBC也需要,本文未涉及该加密模式)、ECB。

不需要Padding的有:CFB、OFB、CTR。

参考资料:

http://hi.baidu.com/doomsword/blog/item/ec73eb2b18f95435d52af120.html

http://hi.baidu.com/tweetyf/item/36d2f94a8639320ae8350480

http://zh.wikipedia.org/wiki/块密码的工作模式

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!