简述

DES和AES都属于分组密码,它们只能加密固定长度的明文。如果需要加密任意长度的明文,就需要对分组密码进行迭代,而

分组密码的迭代方法就称为分组密码"模式"。

分组密码有很多模式,如果模式选择不当,就无法充分保证机密性。

分组密码与流密码

分组密码:每次只能处理特定长度的一块数据的一类密码算法,这里的"一块"就称为分组。此外,一个分组的比特数就称为分组长度。

流密码:对数据流进行连续处理的一类密码算法。流密码中一般以1bit、8bit、32bit等为单位进行加密存储。

一次性密码属于流密码,DES、3DES、AES等大部分对称密码算法都是分组密码。

加密模式

ECB(Electronic CodeBook mode):电子密码本模式

CBC(Cipher Block Chaining mode):密码分组链模式

CFB(Cipher FeedBack mode):密码反馈模式

OFB(Output FeedBack mode):输出反馈模式

CTR(CounTeR mode):计时器模式

ECB模式

ECB(Electronic CodeBook):将明文分组加密后结构直接加密成密文。

注意:当最后一个明文分组的内容小于分组长度时,需要用一些特定的数据进行填充。

所以说,如果中间人瞎几儿改数据,不要改到最后一个分组的。接收端都可以进行正常的解密。

CBC模式

CBC(Cipher Block Chaining):首先将明文分组之前与前一个密文分组进行XOR运算,然后再进行加密。

注意:当加密第一个明文分组时,由于不存在“前一个密文分组”,因此需要事先准备一个长度为一个分组的比特序列来代替“前一个密文分组”,这个比特序列称为初始化向量(Initialization Vector),缩写为IV。一般每次加密时都会随机产生一个不同的比特序列来作为初始化向量。

注意:在分组密码中,当明文长度不为分组长度的整数倍时,需要在最后一个分组中填充一些数据,使其凑满一个分组长度。

注意:SSL/TLS,就是使用CBC模式来确保通信的机密性,如CBC模式中的三重DES为3DES_EDE_CBC,CBC模式256比特AES为AES_256_CBC。

CFB模式

CFB(Cipher FeedBack):前一个密文分组会被送回到密码算法的输入端。

CFB与CBC的区别在于,CFB会把分组的密文再进行加密后,参与下一个分组的加密。

OFB模式

OFB(Output-Feedback):密码算法的输出会反馈到密码算法的输入中。

CTR模式

CTR(CounTeR):是一种通过将逐次累加的计算器进行加密来生成密钥流的流密码。每一个分组对应一个逐次累加的计数器,并通过计数器进行加密来生成密钥流。也就是说,最终的密文分组是通过将计数器加密得到的比特序列,与明文分组进行XOR而得到的。

注意:每次加密时都会生成一个不同的值(nonce)来作为计数器的初始值。当分组长度为128比特(16字节)时,计数器的初始值可能是下面这样的形式:

在加密的过程中,计数器的值会产生如下的变化。

分组模式对比表

加密模式ECB、CBC、CFB、OFB、CTR相关推荐

  1. span class=red[置顶]/span分组对称加密模式:ECB/CBC/CFB/OFB缺CTR- -

    一般的加密通常都是块加密,如果要加密超过块大小的数据,就需要涉及填充和链加密模式,文中提到的ECB和CBC等就是指链加密模式.在C#组件中实现的很多算法和Java都不太兼容,至少我发现RSA和AES/ ...

  2. 分组对称加密模式:ECB/CBC/CFB/OFB

    一般的加密通常都是块加密,如果要加密超过块大小的数据,就需要涉及填充和链加密模式,文中提到的ECB和CBC等就是指链加密模式.在C#组件中实现的很多算法和Java都不太兼容,至少我发现RSA和AES/ ...

  3. 密码学专题 密钥生成|分组加密的模式 ECB|CBC|CFB|OFB

    密钥生成 如何安全地生成密钥.即如何生成可信任的密钥,保证用户得到的密钥是安全的, 生成密钥的机器或程序是可信的. 如何生成安全的密钥.安全的密钥没有统一准确的定义,但一般来说是指密钥抗 猜测和抗穷举 ...

  4. 分组加密模式 ECB CBC OFB CFB ,分组加密填充

    目录 分组加密模式 ECB模式 CBC模式 CFB/OFB都可以作为流加密 CFB模式 OFB模式 分组加密的填充 PKCS7 分组加密模式 多个分组加密互相之间如何关联 ECB模式 每个分组之间单独 ...

  5. 信息安全工程师笔记-加密模式ECB、CBC、CFB、OFB、CTR

    简述 DES和AES都属于分组密码,它们只能加密固定长度的明文.如果需要加密任意长度的明文,就需要对分组密码进行迭代,而 分组密码的迭代方法就称为分组密码"模式". 分组密码有很多 ...

  6. 分组加密模式 ECB、CBC、PCBC、CFB、OFB、CTR

    在分组加密算法中,有几种不同的工作模式,分别是ECB(Electronic CodeBook,电子密码本模式).CBC(Cipher-block chaining,密码块连接模式).PCBC(Prop ...

  7. Javascript实现AES加密解密(ECB/CBC)

    环境配置 js文件https://code.google.com/archive/p/crypto-js/downloads 在线AES加密解密地址http://tool.chacuo.net/cry ...

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

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

  9. Go语言的DES加密(CBC模式, ECB模式) ---- 与java加密互通(转)

    问题场景: 业务需要对接接口, 采用DES加密方式加密, 于是google一下go的DES加密方式, go的DES的默认隐藏了ECB模式, 因为go认为ECB不安全, 所以不建议使用,就隐藏了, 然而 ...

最新文章

  1. MIT媒体实验室主任辞去一切职务:拿了爱泼斯坦170万美金,涉及程序违规,麻省理工宣布彻查...
  2. 十一. 图形、图像与多媒体1.绘图基础
  3. 伪元素改变date类型input框的默认样式实例页面
  4. ACM的输入输出总结
  5. 阿里P8架构师谈:架构设计经验汇总
  6. c语言参数传入函数赋值后传出来,c语言第10次实验内容函数2邹显春.ppt
  7. [HeadFirst-HTMLCSS入门][第十章div,span]
  8. Javascript:事件对象—event
  9. 分享400个微信小程序模板和小程序设计模板
  10. DBMS Implementation 笔记 05: SIMC CATC 以及 Join 操作的实现
  11. android nio wifi 拥堵 超时,提高WiFi上网速度,改变道路拥挤的方法
  12. ML之LIME:可解释性之LIME/SP-LIME的简介、原理、使用方法、经典案例之详细攻略
  13. 视频教程-C/C++黑客编程入门教学视频-C/C++
  14. linux怎么安装网卡驱动固件,linux下安装网卡驱动的方法步骤
  15. 判断入射满射c语言编码,例4,判断下列函数是否是满射、单射、双射。.PDF
  16. 数据结构和算法(Java),上
  17. Windows程序的生与死
  18. OSChina 周四乱弹 ——印象开源中国:总是飙车就容易脱发
  19. 使用Maya和Substance Painter制作一辆越野赛车(2)
  20. 基于深度学习的x射线图像骨龄自动特征提取

热门文章

  1. 网易云加密--Android安卓移动应用程序加密加壳保护方案防破解防逆向分析防游戏外挂
  2. 令最多人“拍断大腿”的DeFi黑马:2017年发起,2020年才百倍爆发
  3. Python学习之学校教学(统计字符出现次数,包括字、标点符号)
  4. 微信小程序开发 案例二 调查问卷
  5. 给定一个正整数n, 输出1到n的所有排列 如输入 3 输出 123, 132, 213, 231, 312, 321 (Java实现)
  6. Java小白从0开始:知识点(3)
  7. 三星android 7.0 root,三星G9200 7.0 root教程_三星G9200获取7.0的root权限
  8. MongoDB 芒果数据库简介安装与基本操作(1)
  9. Java虚拟机JVM简介与理解(一)
  10. tapora true