加密与安全_常见的分组密码 ECB、CBC、CFB、OFB模式介绍

文章目录

  • Pre
  • 概述
  • why
  • 分组密码和流密码的基本概念
  • 什么是模式
  • 分组密码的常见模式
    • 1. ECB 模式(电子密码本模式)
    • 2. CBC 模式(密文分组链接模式)
    • 3. CFB 模式(密文反馈模式)
    • 4. OFB 模式(输出反馈模式)
  • 模式选择建议

在这里插入图片描述


Pre

在这里插入图片描述
在这里插入图片描述


概述

在这里插入图片描述

  1. 介绍分组密码基本概念。
  2. 讲解ECB模式的工作原理、优缺点及应用场景。
  3. 详细介绍CBC模式的工作原理、优缺点及应用场景。
  4. 说明CFB模式的工作原理、优缺点及应用场景。
  5. 解释OFB模式的工作原理、优缺点及应用场景。
  6. 总结并给出模式选择的建议。

why

当需要加密任意长度明文时,就需要分组迭代进行加密。 分组密码有很多模式,如果模式选择不当,就无法充分保证明文的机密性



分组密码和流密码的基本概念

分组密码:将明文数据划分为固定长度的块(通常为128位或64位),然后逐块加密。每个块称为一个分组(block)。

流密码:对数据流进行连续处理的加密算法,逐位或逐字节加密,适用于数据流的加密。


什么是模式

模式是分组密码的迭代算法

比如我们常使用的 DES 算法中的 ECB 模式。 ECB 模式就是将明文分割成多个分组并逐个加密的方法。 ECB 算法计算量小,加解密速度快,但现在已经证实 ECB 是不可靠的模式了。 所以正式场合中不要使用 ECB 模式


分组密码的常见模式

1. ECB 模式(电子密码本模式)

ECB 将明文进行分组后直接加密产生密文分组

在这里插入图片描述

工作原理

  • 将明文分割成多个固定长度的分组。
  • 每个分组独立加密。

优点

  • 计算简单,速度快。
  • 支持并行处理。

缺点

  • 相同的明文分组会产生相同的密文分组,无法隐藏明文的模式和结构。
  • 容易受到统计分析攻击。

应用场景

  • 不适合用于敏感信息的加密,不推荐在正式场合使用。

ECB 模式中,明文和密文是一一对应的。相同的明文一定可以得到相同的密文。所以虽然不能直接根据密文推导出明文,但可以根据密文的特点进行定向攻击

例如: Bob 向 Alice 发送了一个转账的报文:

分组1 = Bob的银行账号 
分组2 = Alice的银行账号 
分组3 = 转账金额

虽然 Eve 不能直接修改账号和金额(因为没有解密数据),但 Eve 可以通过交换分组 1 和分组 2,造成攻击。

分组1 = Alice的银行账号 
分组2 = Bob的银行账号 
分组3 = 转账金额

这种攻击方式能成功就是因为 ECB 没有隐藏明文信息造成的


2. CBC 模式(密文分组链接模式)

密文分组链接模式

在这里插入图片描述

工作原理

  • 第一个明文分组与初始向量(IV)异或后进行加密,产生第一个密文分组。
  • 后续每个明文分组与前一个密文分组异或后进行加密,产生相应的密文分组。

优点

  • 能够隐藏明文的模式和结构,提高安全性。
  • 支持并行解密。

缺点

  • 加密时不支持并行处理,需串行进行。
  • 若某个密文分组损坏,会影响当前和下一个分组的解密。

CBC 最核心的一个环节,是将前一个密文分组作为一个变量带入了下一个明文加密中。 这样即便明文相同,但经过密文异或操作后,就会出现不同的结果。通过这样就实现了混淆明文信息的目的。

但不知道你有没有发现,第一个明文分组如何处理呢? 在处理第一个明文分组时,异或为 0.那么密文分组 A 就退化成了 ECB 模式。 为了避免出现这种情况,我们就需要人为补充一个初始密文分组,这个初始的密文分组就称为IV分量

在这里插入图片描述

应用场景

  • 在需要高安全性且可以容忍串行加密的场景中使用,如文件加密。

3. CFB 模式(密文反馈模式)

对 CBC 模式的一种改进

在这里插入图片描述
在 CFB 模式中,明文分组和密文分组之间只做异或操作就可以了。在此时此刻,密码算法的输出有一些一次性密码本的意思了.

工作原理

  • 第一个明文分组与初始向量(IV)异或后进行加密,产生第一个密文分组。
  • 后续每个明文分组与前一个密文分组异或后进行加密,产生相应的密文分组。

优点

  • 支持并行解密。
  • 可以解密任意的密文分组。

缺点

  • 不能抵御重放攻击。

应用场景

  • 实时通信加密,如网络数据传输。

4. OFB 模式(输出反馈模式)

输出反馈模式。 密码算法的输出会反馈到密码算法的输入中

OFB 并不是通过密码算法对明文进行加密的,而是通过将明文分组和密码算法的输出进行异或来产生密文的。所以 OFB 和 CFB 也有一些类似.

在这里插入图片描述

工作原理

  • 初始向量(IV)输入到加密算法中,产生一个伪随机输出。
  • 明文分组与该伪随机输出异或,产生密文分组。
  • 伪随机输出反馈给加密算法,继续生成下一个伪随机输出。

优点

  • 不需要填充(Padding)。
  • 若密文包含错误比特,仅对应的明文比特会出错。

缺点

  • 不支持并行解密。
  • 存在比特反转攻击风险。

应用场景

  • 对错误容忍性要求较高的场景,如视频流加密。

模式选择建议

  1. ECB 模式:简单快速,但不安全,不推荐使用。
  2. CBC 模式:适用于高安全性需求的场景,如文件加密,推荐使用。
  3. CFB 模式:适用于实时通信,支持并行解密,但需防范重放攻击。
  4. OFB 模式:适用于错误容忍性要求高的场景,但不支持并行解密。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/868335.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

流批一体计算引擎-12-[Flink]旁路输出getSideOutput(OutputTag)实现拆分流和复制流

官网旁路输出 Flink拆分流和复制流 我们在处理数据的时候,有时候想对不同情况的数据进行不同的处理,那么就需要把流进行拆分或者复制。 如果是使用filter来进行拆分,也能满足我们的需求,但每次筛选都要保留整个流,然后遍历整个流,显然很浪费性能,假如能够在一个流了多次…

数据结构练习

1. 快速排序的非递归是通过栈来实现的,则前序与层次可以通过控制入栈的顺序来实现,因为递归是会一直开辟栈区空间,所以非递归的实现只需要一个栈的大小,而这个大小是小于递归所要的, 非递归与递归的时间复杂度是一样的…

举例说明深拷贝和浅拷贝

概述 简单描述一下对象的实例化过程。 创建对象的时候,或者说在实例化对象的时候 Person 类有年龄和学生类 int age 18; Student stu1 new Student(); 比如此时创建一个 age 对象,一个Student 对象,在虚拟机中,会在堆中开一…

新型水冷电阻设计-双面水冷电阻器

一款革命性的电阻器,专为低压和中压应用而设计,尤其是汽车、牵引或船舶系统中的恶劣条件。 EAK采用先进材料制造,采用专利设计,将电阻元件与水基冷却液封装并完全分离,为水冷应用提供模块化、轻量级、小容量、高功率解…

硅纪元视角 | Speak火了!3个月收入翻倍,OpenAI为何频频下注?

在数字化浪潮的推动下,人工智能(AI)正成为塑造未来的关键力量。硅纪元视角栏目紧跟AI科技的最新发展,捕捉行业动态;提供深入的新闻解读,助您洞悉技术背后的逻辑;汇聚行业专家的见解,…

服务器安全卫士的作用

1、检查云主机是否有病毒入侵。如有病毒,使用服务器安全卫士扫描之后,将会展示出来;如果没有病毒,那么就不会展示,显示为0。 2、服务器安全卫士可以跨资源池使用吗,是可以的,比如哈尔滨资源池购…

外卖跑腿小程序APP软件成品系统和软甲开发APP小程序可进行封装打包

,用户友好界面设计 首先,外卖施限小程序APP应具备用户友好的界面设计。界面应简洁明了,让用户能够方便快捷地议,览和选择所需的菜品或服务。系统应提供详细的菜品描述、价格透明,并允许用户根据口味、偏好进行结进和排序。此外&am…

AI究竟是在帮助开发者还是取代他们?

随着科技的迅猛发展,特别是在软件开发领域,生成式人工智能(AIGC)的崛起正悄然改变着开发者的工作方式和整个行业的生态。AIGC不仅能够帮助开发者更高效地完成代码编写、错误检测以及自动化测试等任务,还在一定程度上推…

【基于R语言群体遗传学】-11-二倍体适应性进化

之前的博客,我们讨论了正选择在单倍体中的情况,可以先学习之前的博客: 群体遗传学_tRNA做科研的博客-CSDN博客 分子适应的经典观点是正选择。对于一个新的突变在进化意义上起作用,它必须在罕见时通过选择增加。之前例子中有选择系…

linux下查看当前文件夹下目录的大小

通过这个命令可以查询当前文件夹下的大文件,便于释放磁盘 find . -maxdepth 1 -type d -exec du -sh {} \;

Centos7 安装老版本的chrome

查看自己linux是哪个centos版本 使用以下命令: cat /etc/centos-release我这里是centOS 7。然后在安装最新版的google-chrome时,总是会报错显示存在依赖环境的问题,使得无法安装成功chrome。 Package: google-chrome-stable (/google-chro…

以太坊学习笔记--智能合约效率问题

以太坊学习笔记day5 storage和memory https://solidity.readthedocs.io/en/v0.4.21/types.html#data-location Every complex type, i.e. arrays and structs, has an additional annotation, the “data location”, about whether it is stored in memory or in storage. De…

Jenkins 常用的 Linux 指令

个人名片 🎓作者简介:java领域优质创作者 🌐个人主页:码农阿豪 📞工作室:新空间代码工作室(提供各种软件服务) 💌个人邮箱:[2435024119qq.com] &#x1f4f1…

Leetcode—93. 复原 IP 地址【中等】

2024每日刷题&#xff08;140&#xff09; Leetcode—93. 复原 IP 地址 实现代码 class Solution { public:vector<string> restoreIpAddresses(string s) {vector<string> ans;vector<string> path;function<void(int)>dfs [&](int start) {if…

项目/代码规范与Apifox介绍使用

目录 目录 一、项目规范&#xff1a; &#xff08;一&#xff09;项目结构&#xff1a; &#xff08;二&#xff09;传送的数据对象体 二、代码规范&#xff1a; &#xff08;一&#xff09;数据库命名规范&#xff1a; &#xff08;二&#xff09;注释规范&#xff1a; …

【JSP+Servlet+Maven】——优质外卖订餐系统之概论部分

&#x1f3bc;个人主页&#xff1a;【Y小夜】 &#x1f60e;作者简介&#xff1a;一位双非学校的大二学生&#xff0c;编程爱好者&#xff0c; 专注于基础和实战分享&#xff0c;欢迎私信咨询&#xff01; &#x1f386;入门专栏&#xff1a;&#x1f387;【MySQL&#xff0…

XLSX + LuckySheet + LuckyExcel + Web Worker实现前端的excel预览

文章目录 功能简介简单代码实现web worker 版本效果参考 功能简介 通过LuckyExcel的transformExcelToLucky方法&#xff0c; 我们可以把一个文件直接转成LuckySheet需要的json字符串&#xff0c; 之后我们就可以用LuckySheet预览excelLuckyExcel只能解析xlsx格式的excel文件&a…

别催了别催了,我这周肝快爆了。。

大家好&#xff0c;我是程序员鱼皮。每月一次&#xff0c;给大家分享一下最近一个月我的工作和生活情况。 哦不对&#xff0c;最近一个月&#xff0c;基本没有生活。。 上个月&#xff0c;我主要的重心放在了 3 件事上&#xff1a;产品、技术建设、自媒体。 6 月复盘 产品 …

不锈钢焊条A022

说明&#xff1a;A022是钛钙型药皮的不锈钢焊条。交直流两用&#xff0c;操作性能良好。熔敷金属有良好的耐热、耐腐蚀及抗裂性能。 用途&#xff1a;用于焊接尿素、合成纤维等设备及相同类型的不锈钢结构&#xff0c;也可用于焊后不能进行热处理的铬不锈钢以及复合钢和异种钢等…

kotlin 两个 list 怎么过滤重复数据

在 Kotlin 中&#xff0c;可以通过多种方式来过滤两个列表中的重复数据。下面是几种常见的方法&#xff1a; 方法 1: 使用 distinct 函数 如果你只想要两个列表中去重后的所有元素&#xff0c;可以使用 distinct 函数&#xff1a; val list1 listOf(1, 2, 3, 4, 5) val lis…