版权声明:本文为作者原创,如需转载,请注明出处
https://blog.csdn.net/weixin_42940826
注:以下图片来自于《图解密码学》,这本书讲的更全面细致,建议阅读,在我资源库中有此书,还有使用go语言具体实现和解释此书中的各种加密算法的文档,有需要的可以自习前往免费下载

Q:为什么需要分组模式?
A:明文的长度不固定,而分组密码只能处理特定长度的一块数据,这就需要对分组密码的算法进行迭代,以便将一段很长的明文全部加密,而迭代的方法就是分组的模式。

一图全览五种分组模式

五种模式详解

1. ECB - Electronic Code Book, 电子密码本模式


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加密即解密,解密即加密,且各分组之间是独立的,可以并发完成,效率高。

总结

以上五种分组模式中,ECB模式很容易被破解,如今已经很少再使用,其余四种分组模式各有千秋。
但极力推荐CBC模式和CTR模式,尤其是CTR模式,不需要填充,代码实现起来很方便。而且加密和解密的方法是一样的,并且可以实现并发分组,效率高,安全性也有保障

Q:何时需要填充,何时不需要填充?
A:观察分组模式的图示可以看出,加密后再进行异或操作的不需要填充,而先进行异或操作再加密的则需要填充,这是因为异或操作需要两个相同长度的数据,一一对比计算!


代码实现

篇幅有限,我在这篇帖子用以上分组模式实现了AES、DES、3DES的加密解密(go语言),轻戳了解。
CBC模式实现DES和3DES加密解密
CTR模式实现AES加密解密

【转】对称加密和分组加密中的四种模式(ECB、CBC、CFB、OFB)相关推荐

  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、CFB、OFB)

    ECB 优点 缺点 1.具有操作简单,易于实现的特点 1.不能隐藏明文的模式: 2.分组独立性,有利于并行计算: 2.可能对明文进行主动攻击: 误差不会被传送:|3. 明文中的重复内容会在密文中有所体 ...

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

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

  6. Burp Suite爆破模块中的四种模式的区别详解和演示(暴力破解)

    BrupSuite爆破的四种模式详解 最近看了好多关于暴力破解的博客,其中用的最多的工具就是bp了,但是好多都是一上来给了执行步骤,却没有对爆破的这几个模式选择进行解释,所以今天萌新写个纪录,来阐明这 ...

  7. 滴滴在测试环境探索与实践中的四种模式

    持续稳定并体验良好的测试环境,一直是影响产品迭代效率和稳定性的关键环节,也是DevOps自动化测试环节中最具挑战的一环,滴滴在测试环境上的探索从公司成立之初就从未停止,在这过程中沉淀了很多宝贵的经验和 ...

  8. Burp Suite中intruder爆破模块四种模式的区别

    对于bp爆破模块中的四种模式,字面意思加上英语翻译过来实在太抽象了.那就结合具体实例解释一下 1. Sniper(狙击手) 顾名思义,就是一个一个的来,就跟98K一样,一ju一个准.也是最基础的一种模 ...

  9. 对称加密之分组加密【四】

    对称加密之分组加密[四] 1.分组密码概述 分组密码和流密码的区别. 1.分组密码和流密码的概念与区别: 所谓流密码,就是把明文的所有字符作为一个整体,然后一位一位地对明文字符进行加密.如维吉尼亚密码 ...

最新文章

  1. 解决django关于图片无法显示的问题
  2. python 四足机器人运动学_撸了个四足机器人
  3. android全局计时_Android定时器AlarmManager
  4. day27-python并发编程之多进程
  5. 使用face-api和Tensorflow.js进行预训练的AI情绪检测
  6. 成功将本地文件添加到github仓库
  7. 将mnist获得的数据还原成图片形式
  8. 五款可以取代 Slack 的开源工具
  9. Talos实验室深入我国DDoS黑市DuTe 揭露各种DDoS团伙、平台、工具及攻击
  10. 利用最大流最小割算法matlab割图
  11. java spring security详解
  12. 七种常见的数据分析法之:帕累托法则
  13. 100%解决GitHub打不开或者打开慢
  14. 香蕉树上第二根芭蕉——安装tensorflow中一些问题说明
  15. JS基础知识(二十八):箭头函数
  16. C语言单链表讲解(上):有表头链表的使用
  17. 笔记本电脑插过一次typeC的耳机之后在插3.5的圆孔耳机不能用?
  18. web前端 html5 直播功能开发
  19. JVM出现OOM的八种原因及解决办法
  20. 鲁宾逊无穷小微积分教材在中国高校分布地图

热门文章

  1. 【C语言进阶深度学习记录】二十 结构体大小计算与结构体内存布局的详细方法
  2. Asp.Net Core 第05局:读取配置
  3. 【02】koala编译中文出错(已放弃不用)
  4. JS 判断手机操作系统代码
  5. Charles - 接口抓包分析工具
  6. 动画---图形图像与动画(三)Animation效果的XML实现
  7. Fragment销毁时replace和add两个方法的区别
  8. 关于增强(五)-Class Enhancement
  9. 1558. 得到目标数组的最少函数调用次数 二进制|思维
  10. elementui图片上传php,vue+element-ui+富文本————图片上传