原标题:技术分享丨这是一篇简单的小科普——什么是对称加密算法?(下)

大家好~我是贾正经,又到了干货满满的技术分享趴啦~

上期我们讲解了对称加密算法的小知识,并介绍了国密算法中SM4算法的原理。

本期带大家了解一下分组密码的五个模式。

分组密码的模式

首先了解一下,什么是分组密码?

对称加密又分为分组密码和流密码:

流密码(Stream Cyphers),也称序列密码,一次加密明文中的一个位,是将明文按字符(具体是按二进制位)逐位地加密的一种密码学算法。

分组密码,也叫块加密(Block Cyphers),一次加密明文中的一个块。是将明文按一定的位长分组,明文组经过加密运算得到密文组,密文组经过解密运算(加密运算的逆运算)还原成明文组。

分组密码只能加密固定长度的分组,实际的明文可能远超过密码分组的长度,因此需要对分组密码算法进行迭代,才能将明文全部加密,而迭代的方法就是分组密码的加密模式。

分组密码的主要模式有以下五种:

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

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

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

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

CTR模式:CounTeR mode(计数器模式)

其中,CFB、OFB、CTR三种模式属于流密码。

ECB模式

ECB模式是一种基础的加密方式,密文被切割成分组长度相等的块,然后单独一个个加密,一个个输出组成密文。我们可以将其理解为是一个巨大的“明文分组->密文分组”的对应表(如下图所示),因此ECB模式也称为电子密码本模式。

ECB模式的工作原理

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

ECB模式的优点表现为:简单、快速,支持并行计算器(加解密),而且单一密文损坏的话,不会影响到其他块的解密。

同时,ECB模式的缺点也较为明显:因为明文分组与密文分组是一一对应的关系,因此,如果明文中存在多个重复的明文分组,则这些明文分组最终都将被转换成相同的密文分组。

如此一来,攻击者就可以获悉明文存在怎么样的组合,并可以此为线索来破译密码,此外,通过密文还可以操纵明文(进行删除、替换),不能抵御重放攻击。因此ECB模式是存在一定风险的。

CBC模式

CBC模式,是先将明文分组切成若干个组,然后每个组与前一密文(或初始化向量)进行XOR(异或运算)后进行加密,密文分组像链条(Chain)一样互相连接在一起,因此称为密文分组链接模式。

与ECB模式相比,ECB模式只进行了加密,而CBC模式在加密之前先进行了一次异或运算。

因为这个特点,即使明文分组1和明文分组2的值是相等的,密文分组1和2的值也不一定是相等的。这样一来,ECB模式的缺陷在CBC模式中就不存在了,安全性高了许多。

在CBC模式中,无法单独对一个中间的明文分组进行加密。例如,如果要生成密文分组3,则至少需要凑齐明文分组1、2、3才行。

CBC模式的加密过程

CBC模式的解密过程

假设CBC模式加密的密文分组中有一个分组损坏了,在这种情况下,只要密文分组的长度没有发生变化,则解密时最多只有2个分组受到数据损坏的影响。见下图:

CBC模式的损坏解密过程

假设CBC模式的密文分组中有一个比特缺失了,也会导致密文分组的长度发生变化,此后的分组发生错位,这样一来,缺失比特的位置之后的密文分组也就全部无法解密。见下图:

CBC模式比特缺失解密过程

此外,CBC模式不能并行处理,且同样不能抵御重放攻击。

CFB模式

在CFB模式中,前一个密码分组会被送回到密码算法输入端。在ECB和CBC模式中,明文都是通过密码算法进行加密的,而在CFB模式中,没有通过密码算法直接进行加密。

CFB模式中由密码算法产生的序列成为密钥流,可将CFB看成使用分组密码实现流密码的一种方式。

CFB模式的加密过程

我们将CBC模式和CFB模式对比一下,就可以看出其中的差异了:在CBC模式中,明文分组和密文分组之间有XOR和密码算法两个步骤,而在CFB模式中,明文分组和密文分组之间只有XOR。

CBC模式与CFB模式对比

CFB模式的重放攻击

OFB模式

在OFB模式中,密码算法的输出会反馈到密码算法的输入中。OFB模式不是通过密码算法对明文直接进行加密的,而是通过将明文分组和密码算法的输出进行XOR来产生密文分组,这点与CFB模式非常相似。

OFB模式的加密过程

这个模式优点在于:无需进行填充(因为是流密码),可以抵御重放攻击,而且加解密的结构相同,且可事先生成密钥流。

但如果对密钥流的一个分组加密后,如果其结果和加密前一分组相同,之后的密钥流将变成同一值的不断反复。

CTR模式

CTR模式是一种通过将逐次累加的计数器进行加密来生成密钥流的流密码。

CTR模式的加密过程

CTR模式与OFB模式一样,无需填充,可抵御重放攻击。此外,CTR模式的单一密文损坏并不会影响到其他块的解密,且支持并行运算(加解密),不会有密钥流重复循环出现的情况。

缺点则是需要提供初始计数器值。返回搜狐,查看更多

责任编辑:

java生成sm4算法的对称密钥_技术分享丨这是一篇简单的小科普——什么是对称加密算法?(下)...相关推荐

  1. 对称加密算法_技术分享丨这是一篇简单的小科普——什么是对称加密算法?(下)...

    大家好~我是贾正经,又到了干货满满的技术分享趴啦~ 上期我们讲解了对称加密算法的小知识,并介绍了国密算法中SM4算法的原理.(上集回顾) 本期带大家了解一下分组密码的五个模式. 分组密码的模式 首先了 ...

  2. 这70个Java必背英语单词不会_技术分享 |这70个Java必背英语单词不会,就别说你是Java程序员!...

    对于刚开始学习Java编程的童鞋来说,会看到很多陌生的英语单词,甚至会因为这些英语单词对Java编程望而却步,应众多童鞋的要求,整理出一份Java最常用的英语单词: 播放GIF Compile:编绎 ...

  3. Java生成名片式的二维码源码分享

    世界上25%的人都有拖延症--但我觉得这统计肯定少了,至少我就是一名拖延症患者.一直想把"Java生成名片式(带有背景图片.用户网络头像.用户昵称)的二维码"这篇博客分享出来,但一 ...

  4. android分享文件分享结果_干货分享丨DM删除归档日志文件的多种方法

    上一期我们讲解了DM数据库归档日志的切换,本期我们讲解DM数据库归档日志文件的删除. 本章内容已在如下环境上测试: ①操作系统:中标麒麟7: ②数据库版本:达梦8: 相关关键字:DM数据库.归档日志文 ...

  5. dts数据库迁移工具_干货分享丨DM8 DTS工具使用小技巧

    DTS工具的介绍 DM数据库为迁移提供了图形化工具--DTS.DTS可以从主流大型数据库迁移到DM.DM到DM.文件迁移到DM以及DM迁移到文件的功能,极大的简化了迁移操作,让数据迁移变得简单. DT ...

  6. 达梦数据库删除用户_干货分享丨DM8用户管理

    原标题:干货分享丨DM8用户管理 用户介绍 安装创建达梦企业版数据库后,系统会默认创建四类数据库账号,分别是: SYS:达梦数据库内置管理用户,不能登录,数据库使用的大部分的数据字典和动态性能视图. ...

  7. java生成不重复8位数字_如何生成8位随机不重复的数字编号

    在Java中难免会使用到生成随机不重复的数字编号的时候,那么你知道如何生成8位随机不重复的数字编号吗?下面我们就跟爱站小编一起去看看吧. package com.jjinfo.common.util; ...

  8. Java使用AES算法并指定密钥种子实现加密解密

    Java使用AES指定密钥实现加密解密 一.生成密钥种子 二.使用生成的密钥种子加密 三.使用生成的密钥种子解密 四.AES完整加密解密代码工具类 一.生成密钥种子 import org.apache ...

  9. java生成不重复8位数字_生成8位随机不重复的数字编号

    package com.jjinfo.common.util; import java.util.Arrays; import java.util.Random; /** * */ public cl ...

最新文章

  1. vue音乐项目歌手详情页小结
  2. PCA--主成分分析(Principal components analysis)-最大方差解释
  3. python网站开发linux_使用Python编写Linux系统守护进程实例
  4. D - Undoubtedly Lucky Numbers CodeForces - 244B(数论 )
  5. babel 用法及其 .babelrc 的配置详解,想做前端架构,拒绝一知半解...
  6. [转载] Java9发布回顾Java 8的十大新特性
  7. LeetCode 406. Queue Reconstruction by Height
  8. 局部加权线性回归(Locally weighted linear regression)
  9. 我的docker随笔29:oracle数据库部署
  10. MYSQL创建、删除、修改索引语法
  11. php页面重定向到html,javascript-页面重定向(PHP,HTML)
  12. XenCenter 创建 New Storage Repository
  13. 这两款实用的win10录屏软件,你们千万别错过
  14. maya中英文对照_Maya中英文对照
  15. 一级注册结构工程师《基础考试》题库历年真题
  16. 网络安全等级保护2.0标准解析
  17. R语言查找指定值的位置(行列)1
  18. 图像识别没你想的那么难!看完这篇你也能成专家
  19. Specified class is an interface
  20. Processing创意编程(进阶篇)

热门文章

  1. jquery实现app开发闹钟功能_商城app开发价格及功能列表
  2. springboot 启动 退出_springboot怎么停止掉服务器 我启动了springboot,但是我修改了程序,我怎么重启啊...
  3. was环境通过HTTPS访问其他域名报错 CWPKI0022E: SSL 握手故障:已从目标主机:端口“。。。...
  4. 2018 牛客多校 2
  5. CI中创建你自己的类库
  6. 前端页面卡顿、也许是DOM操作惹的祸?
  7. java.lang.IllegalArgumentException: parameter must be a descendant of this view
  8. MyBatis学习总结_03_优化MyBatis配置文件中的配置
  9. Javascript的枚举属性
  10. Objective-C日记-之KVC