对称加密算法常用的五种分组模式(ECB/CBC/CFB/OFB/CTR)「建议收藏」

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

大家好,又见面了,我是你们的朋友全栈君。

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

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

一图全览五种分组模式

常用分组模式全览

五种模式详解

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

  • 特点: 简单, 效率高, 密文有规律, 容易被破解
  • 最后一个明文分组必须要填充
    • des/3des -> 最后一个分组填充满8字节
    • aes -> 最后一个分组填充满16字节
  • 不需要初始化向量

ECB模式图解


2. CBC – Cipher Block Chaining, 密码块链模式(推荐使用)

  • 特点: 密文没有规律, 经常使用的加密方式
  • 最后一个明文分组需要填充
    • des/3des -> 最后一个分组填充满8字节
    • aes -> 最后一个分组填充满16字节
  • 需要一个初始化向量 – 一个数组
    • 数组的长度: 与明文分组相等
    • 数据来源: 负责加密的人的提供的
    • 加解密使用的初始化向量值必须相同
      CBC模式的加密

3. CFB – Cipher FeedBack, 密文反馈模式

  • 特点: 密文没有规律, 明文分组是和一个数据流进行的按位异或操作, 最终生成了密文
  • 需要一个初始化向量 – 一个数组
    • 数组的长度: 与明文分组相等
    • 数据来源: 负责加密的人的提供的
    • 加解密使用的初始化向量值必须相同
  • 不需要填充
    CFB模式加密

4. OFB – Output-Feedback, 输出反馈模式

  • 特点: 密文没有规律, 明文分组是和一个数据流进行的按位异或操作, 最终生成了密文
  • 需要一个初始化向量 – 一个数组
    • 数组的长度: 与明文分组相等
    • 数据来源: 负责加密的人的提供的
    • 加解密使用的初始化向量值必须相同
  • 不需要填充
    OFB分组模式

5. CTR – CounTeR, 计数器模式(重点,推荐使用)

  • 特点: 密文没有规律, 明文分组是和一个数据流进行的按位异或操作, 最终生成了密文
  • 不需要初始化向量
    • go接口中的iv可以理解为随机数种子, iv的长度 == 明文分组的长度
  • 不需要填充
    这里我们有必要给出CTR模式额解密流程,因为CTR模式的解密和加密是一模一样的过程,在程序实现中也是可逆的,具体程序在文章实现底部有链接
    CTR分组模式
    CTR解密流程
    通过对比发现CTR加密即解密,解密即加密,且各分组之间是独立的,可以并发完成,效率高。

总结

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

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


代码实现

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/128272.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java中数组的最大下标是_c语言中数组下标从几开始

    java中数组的最大下标是_c语言中数组下标从几开始packagepractice;publicclassExtremeValueAndIndex{ publicstaticvoidmain(String[]args){ intnumberArr[]={7,3,5,1,8,4}; intmax=numberArr[0],min=numberArr[0]; intmaxIndex=0,minIndex=0; for(inti=1;i<numberArr.

    2022年10月11日
    1
  • java中级考试 考点_java中级面试题的考点「建议收藏」

    java中级考试 考点_java中级面试题的考点「建议收藏」在我们对java有一定的基础学习后,能力再往上升一些就是中级。对于初级和中级来说,后者除了对于基础java内容把握能力强外,在一些知识点的比较分析和原理解剖上有所理解能力。本篇就java中级面试题进行了整理,挑出了一些典型的高频试题,都来看看具体内容吧。1.比较接口和抽象类的语法区别(1)抽象类可以有构造方法,接口中不能有构造方法。(2)抽象类中可以有普通成员变量,接口中没有普通成员变量!!!(注…

    2022年10月10日
    2
  • 睿智的目标检测29——Keras搭建YoloV4目标检测平台

    睿智的目标检测29——Keras搭建YoloV4目标检测平台睿智的目标检测29——Keras搭建YoloV4目标检测平台学习前言什么是YOLOV4YOLOV4改进的部分(不完全)改进点解析1、主干特征提取网络Backbone2、主干特征提取网络Backbone学习前言哈哈哈我最喜欢的YOLO更新了!什么是YOLOV4YOLOV4是YOLOV3的改进版,在YOLOV3的基础上结合了非常多的小Tricks。尽管没有目标检测上革命性的改变,但是YOLOV4依然很好的结合了速度与精度。根据上图也可以看出来,YOLOV4在YOLOV3的基础上,在FPS不下降的

    2022年6月24日
    25
  • Idea激活码永久有效Idea2020.2.1激活码教程-持续更新,一步到位

    Idea激活码永久有效Idea2020.2.1激活码教程-持续更新,一步到位Idea激活码永久有效2020.2.1激活码教程-Windows版永久激活-持续更新,Idea激活码2020.2.1成功激活

    2022年6月17日
    265
  • 十分钟带你理解Kubernetes核心概念

    十分钟带你理解Kubernetes核心概念

    2021年6月12日
    180
  • flyweight设计模式_享元模式线程安全

    flyweight设计模式_享元模式线程安全亨元模式动机模式定义实例结构要点总结笔记。动机在软件系统采用纯粹对象方案的问题在于大量细粒度的对象会很快充斥在系统中,从而带来很高的运行时代价—主要指内存需求方面的代价如何在避免大量细粒度对象问题的同时,让外部客户仍然能够透明地使用面向对象地方式来进行操作模式定义运用共享技术有效地支持大量细粒度地对象。实例每一个字符都是一个字体 字体对象Fontclass Font{private: //unique object key string key; //object

    2022年8月11日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号