加密模式介绍(ECB、CBC、PCBC、CFB、OFB、CTR)
加密模式介绍(ECB、CBC、PCBC、CFB、OFB、CTR)
加密与解密的加密模式有很多种,在玩Cipher的时候,其中创建Cipher对象的时候需要指定加密模式,去学习了一下各种加密模式,在这里整理记录一下
在加密的类型中,一般分为 对称加密、非对称加密、散列算法。针对 对称加密,一般又有 **分组加密 **和 序列密码
- 分组加密(或 块加密):以 块 为单位进行一次加密,将明文按一定的位长分组成块,明文块加密后得到密文组。解密雷同,密文组解密还原成明文组。常见的有 DES,AES,3DES等。
- 序列加密(或 流加密):以 位 为单位进行一次加密,利用少量的密钥通过某种复杂的密码算法进行运算产生大量的伪随机位流,用于对明文位流的加密。
常见的分组加密的模式有以下几种:
- ECB
- CBC
- PCBC
- CFB, CFBx
- OFB, OFBx
- CTR
1 ECB(Electronic codebook,ECB)电子密码本模式
原理:最基本的工作模式,将待处理信息分组,每组分别进行加密或解密处理
加密解密图:
说明:
- 数据分组 + 各组加密/解密
优点:
- 简单,易实现,可并行
缺点:
分组进行加密,加密方式一致,那么可根据密文情况观察到明文情况,有被破解的风险,不安全
加密消息块相互独立成为被攻击的弱点,不能提供严格的数据保密性,可以对明文进行主动攻击;
2、CBC(Cipher-block chaining,CBC)密码分组链接模式
原理:每个明文块先与其前一个密文块进行异或,然后再进行加密
加密解密图:
说明:
- 可以看到,这种方法的每个密文块都依赖于它前面的明文块,使加密的各段数据之间有了联系,保证了每条消息的唯一性。第一个块中需要使用初始化向量IV
- 加密的时候,第一块后的每一块 需要先与前一个密文异或再加密 Ci = Ek (P ⊕ Ci-1), C0 = IV.
- 解密的时候,一个密文会影响到该明文与后一个明文,不会对其他明文产生影响 Pi = Dk (Ci) ⊕Ci-1, C0 = IV.
优点:
- 无法直接从密文中看出明文信息块的规律,所以安全性比较好
- 因密文块依赖于所有的信息块,加密时,若明文块有一个消息改变则影响所有密文块
- 加密解密过程都需要 初始化向量(而且要相同)
缺点:
因为具备依赖性,加密过程是串行的,无法被并行化,但是解密可以并行化,因为一个密文会影响到该明文与后一个明文,不会对其他明文产生影响
消息必须是块大小的整数倍,不够需要填充
3、PCBC(Propagating cipher-block chaining,PCBC)填充密码块链接模式/明文密码块链接
原理:加解密时,每个明文块不但要与上一个密文异或,还要与上一个明文进行异或
加密解密图:
说明:
- 可以看到,这种方法的每个密文块都依赖于它前面的明文块和密文块,使加密的各段数据之间有了联系,保证了每条消息的唯一性。第一个块中需要使用初始化向量IV
- 加密的时候,第一块后的每一块都要和前一块的明文与密文先异或再加密 Ci = Ek (Pi ⊕ Ci-1 ⊕ Pi-1 ), C0 = IV.
- 解密的时候,第一块后的每一块解密后再与前一块的明文与密文异或 Pi = Dk (Ci) ⊕ Ci-1 ⊕ Pi-1 , C0 = IV.
优点:
- 无法直接从密文中看出明文信息块的规律,所以安全性比较好
- 因密文块依赖于所有的信息块,加密时,若明文块有一个消息改变则影响所有密文块 ,密文块有一个改变也会改变所有明文块
- 加密解密过程都需要 初始化向量(而且要相同)
缺点:
因为具备依赖性,加密/解密过程是串行的,无法被并行化,速度会受到影响
消息必须是块大小的整数倍,不够需要填充
4、CFB(Cipher feedback,CFB)密文反馈模式
原理:前一个密文使用秘钥Key再加密后,与明文异或,得到密文。第一个密文需要初始向量IV加密得到。解密也同样使用加密器进行解密
加密解密图:
说明:
- 第一个块中都需要使用初始化向量IV
- 加密:通过密钥key加密后与明文进行异或得到密文,后面所有的加密都依赖前一个密文
- 解密:通过密钥加密后,与密文进行异或得到明文,当前的密文会影响当前的明文与下一个明文,不会影响所有明文的生成
优点:
- 隐藏了明文模式
- 加密前后的数据位数是相同的,上面两种都需要是块的整数倍(可能会填充)
- 可以及时加密传送小于分组的数据
缺点:
- 与CBC类似,加密不利于并行计算,解密可以并行计算
- 加密时一个明文单元损坏影响多个单元
- 加密解密需要唯一的一个与块的大小相同的移位寄存器,并用初始化向量IV将寄存器初始化
5、OFB(Output feedback,OFB)输出反馈模式
原理: 首先用 块加密器 生成 密钥流(Keystream),然后再将密钥流与明文流异或得到密文流;解密是先用块加密器生成密钥流,再将密钥流与密文流异或得到明文 (与CFB类似)
加密解密图:
说明:
- 第一个块中都需要使用初始化向量IV
- 加密:通过密钥key加密后与明文进行异或得到密文,后面所有的加密都依赖于前一个加密后的输出,CFB是依赖前一个密文
- 解密:通过密钥加密后,与密文进行异或得到明文,当前的 加密后的输出 会影响当前的明文与下一个明文,不会影响所有明文的生成,CFB是 密文会影响,而不是加密后的输出
优点:
- 隐藏了明文模式
- 加密前后的数据位数是相同的,上面两种都需要是块的整数倍(可能会填充)
- 可以及时加密传送小于分组的数据
缺点:
- 与CBC类似,加密不利于并行计算,解密可以并行计算
- 加密时一个明文单元损坏影响多个单元
- 加密解密需要唯一的一个与块的大小相同的移位寄存器,并用初始化向量IV将寄存器初始化
6、CTR(Counter mode,CTR)计数器模式
原理: 与OFB相似,CTR将块密码变为流密码。它通过递增一个加密计数器以产生连续的密钥流,其中,计数器可以是任意保证长时间不产生重复输出的函数
加密解密图:
说明:
- 加密:通过密钥key加密后与明文进行异或得到密文
- 解密:通过密钥加密后,与密文进行异或得到明文
优点:
- 允许并行计算、允许同时处理多块明文 / 密文
- 可随机访问,算法和加密盒的输出不依靠明文和密文的输入,因此如果有足够的保证安全的存储器,加密算法将仅仅是一系列异或运算,这将极大地提高吞吐量。
- 与CFB一样,无需填充
其他:(不常用,了解即可)
- CCM是Cipher Block Chaining Message Authentication Code (CBC-MAC)和Counter模式(CTR)的组合
- GCM是Galois message authentication code mode, 伽罗瓦消息验证码 (GMAC)与Counter模式(CTR)的组合
参考博客:
https://blog.csdn.net/u013073067/article/details/87086562
加密模式介绍(ECB、CBC、PCBC、CFB、OFB、CTR)相关推荐
- [crypto]-52-python3中rsa(签名验签加密解密)aes(ecb cbc ctr)hmac的使用,以及unittest测试用
环境: 在ubuntu14.04下,记得安装:sudo pip3 install pycrypto 代码示例1: =========================== import base64 f ...
- 3des java ecb_PHP 3DES加密 与JAVA通用 加密模式:ECB
昨天帮同事解决了一个接口加密的算法,同事是个小姑娘,不懂,所以老大派我协助她,所以我为了不在姑凉面前掉面子~~火速解决它... 甲方是电信,JAVA写的接口,我一听头就大了,大家都知道~~PHP在加密 ...
- 【Python】PyCryptodome模块中5种AES加密模式介绍
分组密码有五种工作体制: 1.电码本模式(Electronic Codebook Book (ECB)): 2.密码分组链接模式(Cipher Block Chaining (CBC)): 3.计算器 ...
- WIFI 认证加密模式介绍 理解无线安全
8.1 理解无线安全 无线安全是一个广泛的概念,本文特指基于802.11(WEP安全技术)和802.11i协议的无线安全内容. 8.1.1 无线安全概述 无线安全 ...
- WIFI 认证加密模式介绍
8.1 理解无线安全 无线安全是一个广泛的概念,本文特指基于802.11(WEP安全技术)和802.11i协议的无线安全内容. 8.1.1 无线安全概述 无线安全 ...
- js实现在线AES加密解密(支持ECB,CBC,并输出Base64或Hex)
具体请参考:AES在线加密/解密
- 分组加密模式 ECB、CBC、PCBC、CFB、OFB、CTR
在分组加密算法中,有几种不同的工作模式,分别是ECB(Electronic CodeBook,电子密码本模式).CBC(Cipher-block chaining,密码块连接模式).PCBC(Prop ...
- AES加密的工作模式ECB、CBC、CFB、OFB及案例
高级加密标准(Advanced Encryption Standard: AES)是美国国家标准与技术研究院(NIST)在2001年建立了电子数据的加密规范.其是对称加解密算法的最经典算法之一,它是一 ...
- php openssl支持的加密算法和加密模式及加密解密示范实例
<style> textarea{width:88%;height:188px;} </style><?php // 定义要加密的数据 $data = '我是中文@Thi ...
最新文章
- mysql分页的优势_数据库经典分页几种实例及各优缺点
- spring框架中JDK和CGLIB动态代理区别
- 第215天:Angular---指令
- 天天用Synchronized,底层原理是个啥?
- aws php 上传文件 限制大小_如何压缩PDF文件大小,满足各种上传大小要求
- python decorator模块_Python decorator module
- 【python】用正则表达式进行文字局部替换
- 浏览器上跑:TensorFlow发布实时人物分割模型,秒速25帧,24个部位
- 【渝粤题库】陕西师范大学180213《消费经济学》作业 (高起本)
- Flink 新一代流计算和容错——阶段总结和展望
- 如何在pe里加载阵列卡驱动_PE中RAID卡驱动的添加办法
- Atitit 破解qq空间(2)-------探测权限
- 关于社会工程学的利用
- 怎么还原计算机字体库,电脑字体怎么恢复默认设置
- NAS网络存储器(转)
- 最全的关于硬件测试的解读
- 浏览器手动设置Cookie
- Mac 脚本之applescript
- WWDC 2022:iPad上开发App不再是梦?新版Playgrounds来袭!
- springboot毕设项目美食网站设计与实现62e76(java+VUE+Mybatis+Maven+Mysql)
热门文章
- Eclipse 中添加注释,注释中包含作者时间等
- 约瑟夫问题(Josephus)
- 面向对象与面向过程的本质的区别
- Kafka实战(一) : 认识Kafka
- 外卖CPS公众号分销裂变小程序搭建和培训(附源代码和0基础搭建教程)
- android类京东到家开发源码
- 北师大计算机网络教育考试,2018年北京师范大学教育学部408计算机学科专业基础综合之计算机网络考研仿真模拟五套题...
- 到世界各地去扔纸团儿:【Paper Toss: World Tour HD】
- 手写文件如何提取文字?
- 正在公示!“西京大学”来了!