对称加密中的]组加密,也叫块加密,即将明文按一定的长度分组,每次加密明文中的一个分组,得到一个密文的分组,最后将密文分组合并成密文。解密时依次解密每个密文分组,得到对应的明文分组,再将分组合并还原成明文。

在分组加密算法中,有不同的分组与加解密模式,常用的有ECB,CBC,CFB,OFB,CTR这几种。如果我们开发的系统涉及到了分组加密,就有一个如何选择模式的问题,今天就介绍一下上述模式,帮助大家在应用时选择合适的模式。

1.ECB(Electronic Code Book)模式

ECB是最简单的工作模式,原理就是将明文分组,对每一组分别单独加密,加密后的每组密文之间没有联系。加密流程图如下:

解密流程如下:

ECB模式的优点就是计算简单,可以并行加解密。每个分组之间互相独立,某个分组加解密出错不会影响其他分组。但最大的问题就是它没有隐藏明文的统计学特征,同样的明文分组会加密得到同样的密文分组,攻击者可以利用这一弱点对加密行为进行破解。

2.CBC(Cipher Block Chaining)模式

这种模式的核心思想是每一个明文分组在被加密之前要与前一个的密文分组进行异或运算,即每一组的加密结果会参与下一个分组的加密,因此第一个分组加密需要有一个初始化向量(IV)参与。

加密流程图如下:

最后将每个密文分组按顺序合并起来就得到加密结果。解密是加密的逆运算,流程图如下:

CBC模式可以隐藏明文的统计学特征,即使相同的明文分组加密结果也不相同,所以安全性较高。但CBC加密不支持并行,只能一个一个分组串行加密。但解密时除了本组密文和密钥外,只需上一组密文参与,故可以并行计算。CBC存在误差传递,即某个分组加密结果出错,会影响以后分组的加密。CBC模式是分组加密中使用最多的模式。

注意,ECB和CBC模式要求每一分组都是固定的长度,所以很有可能存在最后一个分组需要补位(padding)的情况。所以在这种情况下解密后要把补位去掉,才能得到正确的明文。

3.CFB (Cipher Feedback)模式

这种工作模式吸收了流加密的特点,可以理解成实现了流加密的CBC 模式。这种模式的核心思想是基于前一个密文分组生成密码序列,再用这个密码序列与当前明文分组或密文分组异或,得到相应加密或解密结果。加密过程如下所示:

加密时,首先对初始化向量(IV)加密,用加密的结果与第一个明文分组异或,得到第一个密文分组;然后将此密文分组进行加密(加密前要进行移位处理),将加密结果与第二个明文分组异或,得到第二个密文分组;接下来对第二个密文分组加密……,以此类推,最后得到所有的密文分组。

解密过程与加密过程相似,仍然是将前一密文分组加密(注意,这里仍然是加密,不是解密),用加密结果与当前密文分组异或,得到明文。过程如下:

与CBC相似,CFB模式也隐藏了明文的统计学特征,有较高的安全性。因为采用流加密的模式,有利于加解密速度的提高。同时明文数据不需要补位。但CFB加密过程不能并行化,解密过程可以并行化;同样也存在误差传递。另外,由于依赖前一个密文分组,攻击者可以通过替换多个连续密文分组实现重放攻击。

4.OFB (Output Feedback)模式

OFB模式与CFB模式类似,区别在于使用上一个分组的密码序列加密生成当前分组的密码序列,加密过程如下:

解密过程如下:

OFB的优缺点和CFB也基本类似。不过由于加解密时每个分组都需要前一分组的密码序列,因此不能并行化处理。但由于密码序列只在最终的异或过程中使用,因此可以事先对IV连续进行加密,生成每一个分组所使用的密码序列,最后进行并行异或处理。这样可以进一步提高加解密运算的速度。另外,OFB不存在误差传递,即使某一分组密文出问题,也只会影响这一分组的解密。

5.CTR(Counter)模式

CTR模式与CFB、OFB模式为同一类。但它是通过将逐次累加的计数器进行加密来生成密码序列。也就是说,每一个的密文分组是通过将计数器加密得到的密码序列与明文分组进行异或而得到的。

加密:

解密:

这种模式下,每次加密时都会生成一个不同的值(nonce)来作为计数器的初始值。对于每一个分组计数器都会依次累加。

最后,将上述几种模式总结如下:

分组加密的常用工作模式(转载)相关推荐

  1. 对称加密算法之分组加密的六种工作模式(ECB、CBC、PCBC、CFB、OFB、CTR)

    加密一般分为对称加密(Symmetric Key Encryption)和非对称加密(Asymmetric Key Encryption).对称加密又分为分组加密和序列密码. (1)分组加密,也叫块加 ...

  2. 超低功耗蓝牙模块的常用工作模式

    转贴 超低功耗蓝牙模块的常用工作模式 http://www.openedv.com/thread-86300-1-1.html (出处: OpenEdv-开源电子网) 超低功耗蓝牙4.0模块,用于点对 ...

  3. 分组加密的四种模式(ECB、CBC、CFB、OFB)

    加密一般分为对称加密(Symmetric Key Encryption)和非对称加密(Asymmetric Key Encryption). 对称加密又分为分组加密和序列密码. 分组密码,也叫块加密( ...

  4. Spring源码解析之:Spring Security启动细节和工作模式--转载

    原文地址:http://blog.csdn.net/bluishglc/article/details/12709557 Spring-Security的启动加载细节 Spring-Security的 ...

  5. SPI接口通信协议详解:SPI时序、2线、3线、4线SPI及4种常用工作模式

    简介 SPI通信原理比I2C要简单,它主要是主从方式通信.这种模式通常只有一个主机和一个或者多个从机,标准的SPI是4根线,分别是SSEL(片选,也写作 SCS).SCLK(时钟,也写作SCK).MO ...

  6. 【网络协议趣谈】HTTPS协议加密证书和工作模式

    用HTTP协议,看个新闻还没有问题,但是换到更加严肃的场景中就存在很多的安全风险. 例如,下单做一次支付,如果还是使用普通的HTTP协议,那很可能会被黑客盯上 发送一个请求说要点个外卖,但是这个网络包 ...

  7. AES加密的工作模式ECB、CBC、CFB、OFB及案例

    高级加密标准(Advanced Encryption Standard: AES)是美国国家标准与技术研究院(NIST)在2001年建立了电子数据的加密规范.其是对称加解密算法的最经典算法之一,它是一 ...

  8. java加密工作模式None_simple1234

    simple1234 回答了问题 · 2018-05-25 引入文件 const {ReadCard} = CardReader; 自己编写js文件 import md5 from 'crypto-j ...

  9. 【密码学基础】07 分组加密工作模式

    分组加密工作模式 1. 分组密码工作模式 2. 电码本模式 3. 密文分组链接模式 4. 密码反馈模式 5. 输出反馈模式 6. 计数器模式 7. 小结   前面讲述了传统对称加密技术.数据加密标准D ...

最新文章

  1. 配置oracle net,配置 Oracle Net 的3个重要文件
  2. java鼠标经过时变色_鼠标经过时单元格变色
  3. !假如人类使用 16 进制
  4. SpringMVC的请求-获得请求参数-获得基本类型参数
  5. How is note created - SAP backend implementation
  6. “六级”题公布,觉得WebAPI简单的,勿进!
  7. apex英雄机器人探路者怎么玩_Apex英雄探路者机器人实战技巧攻略[多图]
  8. V-rep学习笔记:机器人逆运动学数值解法(Damped Least Squares / Levenberg-Marquardt Method)...
  9. oracle8 as sysdba,Oracle 8i 密码验证
  10. 项目总结【Excel中附件导出和导入】
  11. 对称数 一个整数,它的各位数字如果是左右对称的,则称这个数是对称数。例如:1234321、123321等。
  12. redis-----简单介绍---基本的配置---持久化----学习笔记
  13. 低延时直播系统开发技术方案
  14. 警惕!国内已有5000余个网站中招!关于一种大规模的暗链劫持流量的风险提示
  15. 个人隐私保护法_浅学一下
  16. 关于LCD1602单独清除某一行的问题
  17. 三、使用Arduino控制WS2812B灯
  18. 多级放大电路的频率响应(上限截止频率FH、下限截止频率FL)
  19. mysql 多对多建表_mysql – 为什么在多对多关系中创建一个新表?
  20. arcgis10.2安装lisense后无法启动的问题

热门文章

  1. 锁屏界面提示某些设置已隐藏_iOS 13隐藏手电筒和相机快捷图标
  2. 区域显示触发_Unity3D 在Hierarchy窗口中显示物体所属Layer
  3. 皮一皮:所以说...哪里的程序猿最能吃辣?
  4. 赠书:京东当当新书榜TOP1的“算法小抄”!
  5. 每日一皮:完美解释 UDP 为什么会丢包...
  6. 每日一皮:从项目的开始到结束,开发人员的变化...
  7. 强力攻城狮的职位要求...
  8. java反射 用处_浅谈Java反射
  9. PCL 点云 欧式聚类疑问
  10. CUDA error:invalid argument