[转帖]AES算法(四)基本工作模式
https://zhuanlan.zhihu.com/p/376077687
本文所述工作模式可适用于 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算法(四)基本工作模式的更多相关文章
- AndroidManifest.xml文件详解(activity)(三)四种工作模式
android:launchMode 这个属性定义了应该如何启动Activity的一个指令.有四种工作模式会跟Intent对象中的Activity标记(FLAG_ACTIVITY_*常量)结合在一起用 ...
- 集群,lvs负载均衡的四种工作模式
集群 集群的三种分类以及用途 负载均衡: 分配流量(调度器),提升速度 高可用: 关键性业务 高性能: 开发算法,天气预报,国家安全 负载均衡的集群 lvs(适用于大规模) haproxy(适用于中型 ...
- java加解密算法--对称加密工作模式
对称加密又分为分组加密和序列密码.分组密码,也叫块加密(block cyphers),一次加密明文中的一个块.是将明文按一定的位长分组,明文组经过加密运算得到密文组,密文组经过解密运算(加密运算的逆运 ...
- 31、activity 四种工作模式
一个应用通常(不一定)对应一个任务栈,相当于有个集合,保存了这个app里所有的页面栈的规则是先进后出,"进"就相当于打开了一个页面,"出"就相当于返回时关闭一个 ...
- vim的四种工作模式(转载别人的)
Vim操作的四种模式 Vim的四种模式一.启动Vim1.双击桌面的图标,就可以启动Vim(是图形界面的)2.在开始菜单---点--运行 接着输入 vim 或者gvim,就可以启动Vim或Gvim了.二 ...
- AES算法加密java实现
package cn.itcast.coderUtils; import java.security.Key; import javax.crypto.Cipher; import javax.cry ...
- 转载pll工作模式解析
PLL共有四种工作模式,只有理解了这四种工作模式的特点,才能在设计中选用恰当的模式,完成自己设计的预期功能.这四种工作模式分别是普通模式(Normal Mode).零延迟缓冲模式(Zero Delay ...
- SPI总线工作模式
一.SPI总线工作模式 SPI总线有四种工作模式,是由时钟极性选择(CPOL)和时钟相位选择(CPHA)决定的. CPOL = 0 ,SPI总线空闲为低电平,CPOL = 1, SPI总线空闲为高电平 ...
- LVS(二):四种工作模型
面试的时候必问这个四种工作模式,因为这几乎是企业里面必用的内容,所以一定要将其理解通透. 一.lvs-nat模式 二.LVS-DR模式(默认) 三.LVS-tun模式 四.LVS-fullnat模式 ...
- DES算法与四种加密模式的代码实现(C++语言)
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/Love_Irelia97/article/ ...
随机推荐
- Go 语言为什么很少使用数组?
大家好,我是 frank,「Golang 语言开发栈」公众号作者. 01 介绍 在 Go 语言中,数组是一块连续的内存,数组不可以扩容,数组在作为参数传递时,属于值传递. 数组的长度和类型共同决定数组 ...
- vue 2实战系列 —— 复习Vue
复习Vue 近期需要接手 vue 2的项目,许久未写,语法有些陌生.本篇将较全面复习 vue 2. Tip: 项目是基于 ant-design-vue-pro ant-design-vue-pro 由 ...
- OfficeWeb365任意文件读取
OfficeWeb365任意文件读取 OfficeWeb365 /Pic/Indexs接口处存在任意文件读取漏洞,攻击者可通过独特的加密方式对payload进行加密,读取任意文件,获取服务器敏感信息, ...
- 实践案例丨GaussDB网络重传/丢包问题定位总结
摘要:本文将介绍几种常用手段,用于梳理数据库网络故障可能存在的问题,从而快速定位恢复. 1 问题背景 在GaussDB各类问题场景中,网络故障是最难定位及恢复的问题之一,其不仅可能影响着数据库的性能, ...
- 千年荒漠变绿洲,看沙漠“卫士”携手昇腾AI植起绿色希望
摘要:风沙肆虐,沙漠侵蚀神州大地,华东师范大学基于昇腾AI基础软硬件平台研制的种树机器人成为沙漠"卫士",穿越戈壁,跨越千里,为荒漠治理贡献力量!华师大携手昇腾AI共同植起绿色希望 ...
- 边缘AI方案落地问题探讨
摘要:本文介绍了如何兑现边缘AI带来好处的承诺,并针对边缘AI落地和商业闭环发起的开源社区工作. 本文分享自华为云社区<华为云:边缘AI方案落地问题探讨及调研>,作者: 华为云边缘云创新实 ...
- vue2升级vue3: h、createVNode、render、createApp使用
h.createVNode 杂乱笔记,凑合着看,不喜勿喷! h 函数是什么 h 函数本质就是 createElement() 的简写,作用是根据配置创建对应的虚拟节点,在vue 中占有极其重要的地位! ...
- 一文读懂火山引擎A/B测试的实验类型(3)——多链接实验
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 一. 概述 多链接实验,也称为Split url实验,用户根据分流结果访问不同版本的url. 举个例子: 当您有两 ...
- Midjouney限时免费体验
前言 Midjourney 是一个人工智能程序,可根据文本生成图像,目前架设在 Discord 频道上.于 2022 年 7 月 12 日进入公开测试阶段,使用者可通过 Discord 的机器人指令进 ...
- Android gradle dependency tree change(依赖树变化)监控实现,sdk version 变化一目了然
@ 目录 前言 基本原理 执行流程 diff 报告 不同分支 merge 过来的 diff 报告 同个分支产生的 merge 报告 同个分支提交的 diff 报告 具体实现原理 我们需要监控怎样的 D ...