【转】对称加密和分组加密中的四种模式(ECB、CBC、CFB、OFB)
版权声明:本文为作者原创,如需转载,请注明出处
https://blog.csdn.net/weixin_42940826
注:以下图片来自于《图解密码学》,这本书讲的更全面细致,建议阅读,在我资源库中有此书,还有使用go语言具体实现和解释此书中的各种加密算法的文档,有需要的可以自习前往免费下载
Q:为什么需要分组模式?
A:明文的长度不固定,而分组密码只能处理特定长度的一块数据,这就需要对分组密码的算法进行迭代,以便将一段很长的明文全部加密,而迭代的方法就是分组的模式。
一图全览五种分组模式
五种模式详解
1. ECB - Electronic Code Book, 电子密码本模式
- 特点: 简单, 效率高, 密文有规律, 容易被破解
- 最后一个明文分组必须要填充
- des/3des -> 最后一个分组填充满8字节
- aes -> 最后一个分组填充满16字节
- 不需要初始化向量
2. CBC - Cipher Block Chaining, 密码块链模式(推荐使用)
- 特点: 密文没有规律, 经常使用的加密方式
- 最后一个明文分组需要填充
- des/3des -> 最后一个分组填充满8字节
- aes -> 最后一个分组填充满16字节
- 需要一个初始化向量 - 一个数组
- 数组的长度: 与明文分组相等
- 数据来源: 负责加密的人的提供的
- 加解密使用的初始化向量值必须相同
3. CFB - Cipher FeedBack, 密文反馈模式
- 特点: 密文没有规律, 明文分组是和一个数据流进行的按位异或操作, 最终生成了密文
- 需要一个初始化向量 - 一个数组
- 数组的长度: 与明文分组相等
- 数据来源: 负责加密的人的提供的
- 加解密使用的初始化向量值必须相同
- 不需要填充
4. OFB - Output-Feedback, 输出反馈模式
- 特点: 密文没有规律, 明文分组是和一个数据流进行的按位异或操作, 最终生成了密文
- 需要一个初始化向量 - 一个数组
- 数组的长度: 与明文分组相等
- 数据来源: 负责加密的人的提供的
- 加解密使用的初始化向量值必须相同
- 不需要填充
5. CTR - CounTeR, 计数器模式(重点,推荐使用)
- 特点: 密文没有规律, 明文分组是和一个数据流进行的按位异或操作, 最终生成了密文
- 不需要初始化向量
- go接口中的iv可以理解为随机数种子, iv的长度 == 明文分组的长度
- 不需要填充
这里我们有必要给出CTR模式额解密流程,因为CTR模式的解密和加密是一模一样的过程,在程序实现中也是可逆的,具体程序在文章实现底部有链接
通过对比发现CTR加密即解密,解密即加密,且各分组之间是独立的,可以并发完成,效率高。
总结
Q:何时需要填充,何时不需要填充?
A:观察分组模式的图示可以看出,加密后再进行异或操作的不需要填充,而先进行异或操作再加密的则需要填充,这是因为异或操作需要两个相同长度的数据,一一对比计算!
代码实现
篇幅有限,我在这篇帖子用以上分组模式实现了AES、DES、3DES的加密解密(go语言),轻戳了解。
CBC模式实现DES和3DES加密解密
CTR模式实现AES加密解密
【转】对称加密和分组加密中的四种模式(ECB、CBC、CFB、OFB)相关推荐
- span class=red[置顶]/span分组对称加密模式:ECB/CBC/CFB/OFB缺CTR- -
一般的加密通常都是块加密,如果要加密超过块大小的数据,就需要涉及填充和链加密模式,文中提到的ECB和CBC等就是指链加密模式.在C#组件中实现的很多算法和Java都不太兼容,至少我发现RSA和AES/ ...
- 分组对称加密模式:ECB/CBC/CFB/OFB
一般的加密通常都是块加密,如果要加密超过块大小的数据,就需要涉及填充和链加密模式,文中提到的ECB和CBC等就是指链加密模式.在C#组件中实现的很多算法和Java都不太兼容,至少我发现RSA和AES/ ...
- 密码学专题 密钥生成|分组加密的模式 ECB|CBC|CFB|OFB
密钥生成 如何安全地生成密钥.即如何生成可信任的密钥,保证用户得到的密钥是安全的, 生成密钥的机器或程序是可信的. 如何生成安全的密钥.安全的密钥没有统一准确的定义,但一般来说是指密钥抗 猜测和抗穷举 ...
- 分组加密中的四种模式(ECB、CBC、CFB、OFB)
ECB 优点 缺点 1.具有操作简单,易于实现的特点 1.不能隐藏明文的模式: 2.分组独立性,有利于并行计算: 2.可能对明文进行主动攻击: 误差不会被传送:|3. 明文中的重复内容会在密文中有所体 ...
- 分组加密的四种模式(ECB、CBC、CFB、OFB)
加密一般分为对称加密(Symmetric Key Encryption)和非对称加密(Asymmetric Key Encryption). 对称加密又分为分组加密和序列密码. 分组密码,也叫块加密( ...
- Burp Suite爆破模块中的四种模式的区别详解和演示(暴力破解)
BrupSuite爆破的四种模式详解 最近看了好多关于暴力破解的博客,其中用的最多的工具就是bp了,但是好多都是一上来给了执行步骤,却没有对爆破的这几个模式选择进行解释,所以今天萌新写个纪录,来阐明这 ...
- 滴滴在测试环境探索与实践中的四种模式
持续稳定并体验良好的测试环境,一直是影响产品迭代效率和稳定性的关键环节,也是DevOps自动化测试环节中最具挑战的一环,滴滴在测试环境上的探索从公司成立之初就从未停止,在这过程中沉淀了很多宝贵的经验和 ...
- Burp Suite中intruder爆破模块四种模式的区别
对于bp爆破模块中的四种模式,字面意思加上英语翻译过来实在太抽象了.那就结合具体实例解释一下 1. Sniper(狙击手) 顾名思义,就是一个一个的来,就跟98K一样,一ju一个准.也是最基础的一种模 ...
- 对称加密之分组加密【四】
对称加密之分组加密[四] 1.分组密码概述 分组密码和流密码的区别. 1.分组密码和流密码的概念与区别: 所谓流密码,就是把明文的所有字符作为一个整体,然后一位一位地对明文字符进行加密.如维吉尼亚密码 ...
最新文章
- 解决django关于图片无法显示的问题
- python 四足机器人运动学_撸了个四足机器人
- android全局计时_Android定时器AlarmManager
- day27-python并发编程之多进程
- 使用face-api和Tensorflow.js进行预训练的AI情绪检测
- 成功将本地文件添加到github仓库
- 将mnist获得的数据还原成图片形式
- 五款可以取代 Slack 的开源工具
- Talos实验室深入我国DDoS黑市DuTe 揭露各种DDoS团伙、平台、工具及攻击
- 利用最大流最小割算法matlab割图
- java spring security详解
- 七种常见的数据分析法之:帕累托法则
- 100%解决GitHub打不开或者打开慢
- 香蕉树上第二根芭蕉——安装tensorflow中一些问题说明
- JS基础知识(二十八):箭头函数
- C语言单链表讲解(上):有表头链表的使用
- 笔记本电脑插过一次typeC的耳机之后在插3.5的圆孔耳机不能用?
- web前端 html5 直播功能开发
- JVM出现OOM的八种原因及解决办法
- 鲁宾逊无穷小微积分教材在中国高校分布地图
热门文章
- 【C语言进阶深度学习记录】二十 结构体大小计算与结构体内存布局的详细方法
- Asp.Net Core 第05局:读取配置
- 【02】koala编译中文出错(已放弃不用)
- JS 判断手机操作系统代码
- Charles - 接口抓包分析工具
- 动画---图形图像与动画(三)Animation效果的XML实现
- Fragment销毁时replace和add两个方法的区别
- 关于增强(五)-Class Enhancement
- 1558. 得到目标数组的最少函数调用次数 二进制|思维
- elementui图片上传php,vue+element-ui+富文本————图片上传