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

上期我们讲解了对称加密算法的小知识,并介绍了国密算法中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模式的单一密文损坏并不会影响到其他块的解密,且支持并行运算(加解密),不会有密钥流重复循环出现的情况。

缺点则是需要提供初始计数器值。

以上便是本期技术分享的全部内容了,有不懂的小伙伴欢迎留言提问哦~

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

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

    原标题:技术分享丨这是一篇简单的小科普--什么是对称加密算法?(下) 大家好~我是贾正经,又到了干货满满的技术分享趴啦~ 上期我们讲解了对称加密算法的小知识,并介绍了国密算法中SM4算法的原理. 本期 ...

  2. 阿里技术分享:电商IM消息平台,在群聊、直播场景下的技术实践

    本文由淘宝消息业务团队李历岷(花名骨来)原创分享,首次发表于公众号"淘系技术",有修订和改动. 1.引言 本文来自淘宝消息业务团队的技术实践分享,分析了电商IM消息平台在非传统IM ...

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

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

  4. qfile指定从多少行开始_技术者丨你对JavaScript知多少(第四期)

    网上很流行的黑客帝国代码雨,看起来很酷炫是不是,那么要如何实现呢? 咱们先看CSS这里,这一小段作用有点大,margin为0,就填充了整个窗口,放大缩小都不会影响.还有overflow超出隐藏,这里直 ...

  5. python个人博客搭建说明书_技术分享|利用Python Django一步步搭建个人博客(二)...

    原标题:技术分享|利用Python Django一步步搭建个人博客(二) Hello,欢迎来到我们的"利用Python Django一步步搭建个人博客"系列的第二部分.在第一部分中 ...

  6. mysql优化说出九条_技术分享 | MySQL 优化:为什么 SQL 走索引还那么慢?

    原标题:技术分享 | MySQL 优化:为什么 SQL 走索引还那么慢? 背景 2019-01-11 9:00-10:00 一个 MySQL 数据库把 CPU 打满了. 硬件配置:256G 内存,48 ...

  7. 干涉测量技术的应用_技术分享 | 石化行业测量仪表应用在线答疑

    众所周知,在化工和石化这类流程行业当中,稳定性和持续性是至关重要的生产"命脉",对于生产过程中使用的测量仪表有着极其严格的要求. 不仅所有测量仪表都必须满足严苛的国际标准,如PED ...

  8. 大表与大表join数据倾斜_技术分享|大数据技术初探之Spark数据倾斜调优

    侯亚南 数据技术处 支宸啸 数据技术处 在大数据计算中,我们可能会遇到一个很棘手的问题--数据倾斜,此时spark任务的性能会比预期要差很多:绝大多数task都很快执行完成,但个别task执行极慢或者 ...

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

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

最新文章

  1. 积累有价值的seo资源提高网站优化效果
  2. 分布式机器学习框架:MxNet 前言
  3. NYOJ---540奇怪的排序
  4. html表ge模板_猿进化系列10——一文学会动态模板的套路
  5. Oracle客户端tnsnames.ora连接配置
  6. 2009年4月21日 博客更新公告,敬请关注!
  7. oracle 中的参数 optimizer_mod的各个参数的意义
  8. 1)hadoop集群搭建
  9. 计算机ip地址和用户名和密码忘记了怎么办,192.168.1.112这是IP地址 我把密码忘了 怎么处理啊 电脑室现在还...
  10. border英文缩写_第一丶第二丶第三丶第四的英文缩写是什么
  11. 调用微信API获取小程序URL Link
  12. 【Word】word2010中如何去掉标题前面的小黑点
  13. Tajima's D的意义
  14. mui实现APP中的支付宝支付
  15. 不同系统mysql安装教程
  16. 新型光电复合缆特点及其应用
  17. NOAA网站气象台站数据下载教程
  18. m3u8文件里只有js链接,没有ts链接,和key文件的一点记录
  19. 教你一招搞定 GitHub 下载加速!
  20. iOS开发:下架App的步骤

热门文章

  1. 取特定字符串后的数字 linux_Linux相关操作(四)
  2. 期刊投稿状态_干货| SCI论文投稿,你还是知道太少了
  3. 语音合成的语音相位图
  4. 第K短路模板【POJ2449 / 洛谷2483 / BZOJ1975 / HDU6181】
  5. 收集微信跳一跳的辅助
  6. 使用 邮箱配置 激活码 用于 用户注册激活
  7. nodejs安装及环境配置(windows系统)
  8. 单身的我听着单身情歌。。。看着那些儿时看过的小说。。。
  9. Jsp实现BBS论坛交流系统
  10. numpy.linalg.svd