zoukankan      html  css  js  c++  java
  • AES CFB/OFB/ECB/CBC/CTR优缺点

    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/块密码的工作模式

  • 相关阅读:
    Redis 持久化
    Redis 事务
    select poll和 epoll
    jdk信任证书
    Java中的锁分类
    mysql触发器同步远程服务器上数据库
    正则表达式
    mysql主从同步
    MySQL逗号分割字段的行列转换技巧
    Mysql中文排序
  • 原文地址:https://www.cnblogs.com/LiuYanYGZ/p/10438819.html
Copyright © 2011-2022 走看看