https://zhuanlan.zhihu.com/p/376077687
8 人赞同了该文章

本文所述工作模式可适用于 DES、AES 等分组密码算法中

分组密码算法只能加密固定长度为 N 比特的分组数据(DES 和 3DES 算法中 N=64,AES 算法中 N=128),若待加密数据长度 != N ,则待加密数据需要被分组或填充至长度为 N 比特的数据块用以加密,至于如何分组及填充则取决于使用的工作模式和填充方式。

早在 1981 年,DES 算法公布之后,NIST 在标准文献 FIPS 81 中公布了 4 种工作模式:

  • 电子密码本:Electronic Code Book Mode (ECB)
  • 密码分组链接:Cipher Block Chaining Mode (CBC)
  • 密文反馈:Cipher Feedback Mode (CFB)
  • 输出反馈:Output Feedback Mode (OFB)

后面又新增了一些工作模式:

  • 计数器模式:Counter Mode (CTR)
  • 填充密码分组链接:Propagating Cipher Block Chaining Mode(PCBC)

ECB 模式

ECB 加密所需数据:明文 P、加密密钥 Key、数据填充模式 M。

ECB 加密步骤如下:

  • 将 P 分为 P0、P1、P2、...、Pn,Px 长度为 = 128,长度不足需填充
  • 用 Key 将 P0 加密得出 C0
  • 用 Key 将 P1 加密得出 C1
  • ...
  • 用 Key 将 Pn 加密得出 Cn
  • 拼接 C0、C1、...Cn 得到密文 C

ECB 的理想应用场景是短数据(如加密密钥)的加密。ECB 模式中明文和密文是一一对应的,相同的明文分组加密将会得到相应的密文分组,因此它不能很好的隐藏模式。

CBC 模式

CBC 加密所需数据:明文 P、加密密钥 Key、初始向量 IV、数据填充模式 M。

CBC 加密步骤如下:

  • 将 P 分为 P0、P1、P2、...、Pn,Px 长度 = 128,长度不足需填充
  • 将 P0、IV 做异或运算得到 P0_IV,用 Key 将 P0_IV 加密得到 C0
  • 将 P1、C0 做异或运算得到 P1_IV,用 Key 将 P1_IV 加密得到 C1
  • ...
  • 将 Pn、C(n-1) 做异或运算得到 Pn_IV,用 Key 将 Pn_IV 加密得到 Cn
  • 拼接 C0、C1、...Cn 得到密文 C

CBC 模式相比 ECB 实现了更好的模式隐藏,但因为其将密文引入运算,加解密操作无法并行操作。同时引入的 IV 向量,还需要加、解密双方共同知晓方可。

CFB 模式

CFB 加密所需数据:明文 P、加密密钥 Key、初始向量 IV。

CFB 加密步骤如下:

  • 将 P 分为 P0、P1、P2、...、Pn,Px 长度 <= 128
  • 用 Key 加密 IV 得到 IV0,将 IV0、P0 做异或运算得到 C0
  • 用 Key 加密 C0 得到 IV1,将 IV1、P1 做异或运算得到 C1
  • ...
  • 用 Key 加密 C(n-1) 得到 IVn,将 IVn、Pn 做异或运算得到 Cn
  • 拼接 C0、C1、...Cn 得到密文 C,加密结束

CFB 模式是用分组算法实现流算法,明文数据不需要按分组大小对齐。

OFB 模式

OFB 加密所需数据:明文 P、加密密钥 Key、初始向量 IV。

OFB 加密步骤如下:

  • 将 P 分为 P0、P1、P2、...、Pn,Px 长度 <= 128
  • 用 Key 加密 IV 得到 IV0,将 IV0 与P0 做异或运算得到 C0
  • 用 Key 加密 IV0 得到 IV1,将 IV1 与P1 做异或运算得到 C1
  • ...
  • 用 Key 加密 IV(n-1) 得到 IVn,将 IVn 与Pn 做异或运算得到 Cn
  • 拼接 C0、C1、...Cn 得到密文 C

CTR 模式

CTR 加密所需数据:明文 P、加密密钥 Key、初始向量 IV。

CTR 加密步骤如下:

  • 将 P 分为 P0、P1、P2、...、Pn,Px 长度 <= 128
  • 生成累加计数器 c0、c1、c2、...、cn
  • 将 IV、c0 进行运算(连接、加和、异或等)得到 IV_c0,用 Key 加密 IV_c0 得到 IV0,将 IV0、P0 做异或运算得到 C0
  • 将 IV、c1 进行运算(连接、加和、异或等)得到 IV_c1,用 Key 加密 IV_c1 得到 IV1,将 IV1、P1 做异或运算得到 C1
  • ...
  • 将 IV、cn 进行运算(连接、加和、异或等)得到 IV_cn,用 Key 加密 IV_cn 得到 IVn,将 IVn、Pn 做异或运算得到 Cn
  • 拼接 C0、C1、...Cn 得到密文 C

PCBC 模式

PCBC 加密所需数据:明文 P、加密密钥 Key、初始向量 IV、数据填充模式 M。

PCBC 加密步骤如下:

  • 将 P 分为 P0、P1、P2、...、Pn,Px 长度 = 128,长度不足需填充
  • 将 P0、IV 做异或运算得到 P0_IV,用 Key 将 P0_IV 加密得到 C0
  • 将 P1、C0、P0 做异或运算得到 P1_IV,用 Key 将 P1_IV 加密得到 C1
  • ...
  • 将 Pn、C(n-1)、P(n-1) 做异或运算得到 Pn_IV,用 Key 将 Pn_IV 加密得到 Cn
  • 拼接 C0、C1、...Cn 得到密文 C

[转帖]AES算法(四)基本工作模式的更多相关文章

  1. AndroidManifest.xml文件详解(activity)(三)四种工作模式

    android:launchMode 这个属性定义了应该如何启动Activity的一个指令.有四种工作模式会跟Intent对象中的Activity标记(FLAG_ACTIVITY_*常量)结合在一起用 ...

  2. 集群,lvs负载均衡的四种工作模式

    集群 集群的三种分类以及用途 负载均衡: 分配流量(调度器),提升速度 高可用: 关键性业务 高性能: 开发算法,天气预报,国家安全 负载均衡的集群 lvs(适用于大规模) haproxy(适用于中型 ...

  3. java加解密算法--对称加密工作模式

    对称加密又分为分组加密和序列密码.分组密码,也叫块加密(block cyphers),一次加密明文中的一个块.是将明文按一定的位长分组,明文组经过加密运算得到密文组,密文组经过解密运算(加密运算的逆运 ...

  4. 31、activity 四种工作模式

    一个应用通常(不一定)对应一个任务栈,相当于有个集合,保存了这个app里所有的页面栈的规则是先进后出,"进"就相当于打开了一个页面,"出"就相当于返回时关闭一个 ...

  5. vim的四种工作模式(转载别人的)

    Vim操作的四种模式 Vim的四种模式一.启动Vim1.双击桌面的图标,就可以启动Vim(是图形界面的)2.在开始菜单---点--运行 接着输入 vim 或者gvim,就可以启动Vim或Gvim了.二 ...

  6. AES算法加密java实现

    package cn.itcast.coderUtils; import java.security.Key; import javax.crypto.Cipher; import javax.cry ...

  7. 转载pll工作模式解析

    PLL共有四种工作模式,只有理解了这四种工作模式的特点,才能在设计中选用恰当的模式,完成自己设计的预期功能.这四种工作模式分别是普通模式(Normal Mode).零延迟缓冲模式(Zero Delay ...

  8. SPI总线工作模式

    一.SPI总线工作模式 SPI总线有四种工作模式,是由时钟极性选择(CPOL)和时钟相位选择(CPHA)决定的. CPOL = 0 ,SPI总线空闲为低电平,CPOL = 1, SPI总线空闲为高电平 ...

  9. LVS(二):四种工作模型

    面试的时候必问这个四种工作模式,因为这几乎是企业里面必用的内容,所以一定要将其理解通透. 一.lvs-nat模式 二.LVS-DR模式(默认) 三.LVS-tun模式 四.LVS-fullnat模式 ...

  10. DES算法与四种加密模式的代码实现(C++语言)

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/Love_Irelia97/article/ ...

随机推荐

  1. 字正腔圆,万国同音,coqui-ai TTS跨语种语音克隆,钢铁侠讲16国语言(Python3.10)

    按照固有的思维方式,如果想要语音克隆首先得有克隆对象具体的语言语音样本,换句话说,克隆对象必须说过某一种语言的话才行,但现在,coqui-ai TTS V2.0版本做到了,真正的跨语种无需训练的语音克 ...

  2. 编译安装openssl-1.1.1和openssh-9.4

    1.安装 openssl-1.1.1 先处理下opensll的版本,以免编译安装Openssh环境异常: yum remove openssl cd /opt wget https://www.ope ...

  3. JavaFx之整合JFoenix(十四)

    JavaFx之整合JFoenix JFoenix是JavaFx流行的UI框架之一 github:https://github.com/sshahine/JFoenix 整合Maven <!--h ...

  4. 未经授权访问 .js

    流程顺序:后台管理登陆地址 → 后台主页地址 → fuzz测试出用户管理列表接口 → 直接调接口..全程黑盒. 那么接下来我逆着来推理下逻辑: 首先是拿到某后台管理登录的网址 接着查看html源码,发 ...

  5. 聊一聊如何整合Microsoft.Extensions.DependencyInjection和Castle.Core(三)

    前言 今天的第三篇,感觉没啥人看呀,难道没有兄弟跟我有同样的整合需求吗???手动 , 本文会简短一些,介绍下 CastleCore 作为代理库的一些缺点甚至是硬伤 异步支持 先上代码 /// < ...

  6. Windows使用docker踩坑记录

    一.安装踩坑 安装时会让你选择:是否使用Windows容器 Use Windows containers instead of Linux containers(this can be changed ...

  7. 【华为云技术分享】STM32L476移植华为LiteOS系列教程------背景知识 1

    一.这篇文章想向大家说明一个问题,我们开发单片机的本质是什么? 在最早的开发中,我们没有Keil.IAR等等一系列好用的单片机集成开发环境,注意这里的"集成",是指将多个软件其中有 ...

  8. 教你用Python自制拼图小游戏,轻松搞定熊孩子

    摘要:本文主要为大家详细介绍了python实现拼图小游戏,文中还有示例代码介绍,感兴趣的小伙伴们可以参考一下. 开发工具 Python版本:3.6.4 相关模块: pygame模块: 以及一些Pyth ...

  9. 古有诸葛亮八卦阵阻敌,今有 iptables 护网安

    摘要:保障网络环境的安全,我们得"武装"起来,守住各个入口.怎么"武装"呢? 网络世界就和现实世界一样,总是会有些不怀好意的"人"出现,扫扫 ...

  10. DTSE Tech Talk 第18期丨统计信息大揭秘,数仓SQL执行优化之密钥

    摘要:华为云EI DTSE技术布道师王跃,针对统计信息对于查询优化器的重要性,GaussDB(DWS)最新版本的analyze当前能力,与开发者和伙伴朋友们展开交流互动,帮助开发者快速上手使用统计信息 ...