简述

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、PCBC、CFB、OFB、CTR

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

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

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

  7. 信息安全工程师笔记-公钥密钥体制概念

    公钥和私钥 公开密钥密码的思想是将传统密钥k一分为二,分为加密密钥Ke和解密密钥Kd,用加密密钥Ke控制加密,用解密密钥Kd控制解密. 每个用户都将自己的姓名.地址.公开的加密密钥等信息在KMC(密钥 ...

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

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

  9. 信息安全工程师笔记-综合知识冲刺(三)

    攻击密码的类型: ①仅知密文攻击:攻击者仅仅是知道密文,来进行破解: ②已知明文攻击:攻击者知道某些明文,对应的密文: ③选择明文攻击:攻击者通过选择一些明文,获得相应的密文: ④选择密文攻击:攻击者 ...

最新文章

  1. 华为的创新——计划制定和调整水平
  2. Windows如何打包Qt程序
  3. SQL Server存储过程(转载)
  4. 机器学习Sklearn实战——梯度提升树二分类原理
  5. A-Frame 简介03
  6. Java 8编写自定义收集器简介
  7. java应用程序做授权_java-为我的Web应用程序编写授权过滤器(JSF ...
  8. java 如何去掉http debug日志_Java高手如何搭建高效易用的日志系统
  9. 10 个 Python 项目简单又超有趣
  10. 一代霸主的没落——诺基亚
  11. 如何扒取整站网页----扒站神器(Mac版跟window版)
  12. c#轻量级高并发物联网服务器接收程序源码
  13. android保存裁剪图片,Android选择图片并裁剪,无法保存经过裁剪的图片
  14. java gui 做闹钟,用JAVA怎样编写一个可以在eclipse中运行的闹钟程序?
  15. php halt,thinkphp-调试halt
  16. 《mysql必知必会》学习笔记
  17. 学生学籍管理系统数据流图
  18. Android 华为手机10.1 启动service Service starting has been prevented by iaware or trustsbase **
  19. 2022-2028全球与中国药房自动化机器人市场现状及未来发展趋势
  20. SOI技术及产业发展研究

热门文章

  1. 大家知道苹果手机打电话时如何录音吗
  2. 2018兰亭序系列书法作品集
  3. ArcGIS安装过程中的“需要microsoft.net framework 3.5 sp1或等效环境“问题
  4. c++ pat 乙级 -------1002 读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字
  5. 华为鸿蒙os升级名单时间,华为鸿蒙系统升级时间表
  6. 乌当区前三季度大数据产业实现产值60亿元
  7. 虚函数继承与虚函数表-汇编码分析
  8. 一周 AIGC 丨王小川打造中国版 OpenAI,阿里版 ChatGPT 上线邀测
  9. python绘制余弦曲线图_Python使用matplotlib绘制正弦和余弦曲线的方法示例
  10. Apache中 RewriteCond 规则参数介绍