奇妙的安全旅行之DES算法(二)

hi,大家好,上一节我们详细介绍了对称加密算法DES的基本内容,由于明文的长度不固定,而加密算法只能处理特定长度的一块数据,所以就需要对比较长的明文进行分组后再加密,但是分组后,最后一组的长度可能又会出现位数长度不够的情况,所以就又需要根据填充模式来对最后一组报文进行填充。

对称加密的分组模式

对称加密一共有五种分组模式,下面我们来介绍一下。

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

优点

  • 简单,效率高
  • 有利于并行计算
  • 误差不会被传送

缺点

  • 密文有规律,容易被破解

  • 可能对明文进行主动攻击

特性

  • 最后一个明文分组必须要填充
    • des/3des -> 最后一个分组填充满8字节
    • aes -> 最后一个分组填充满16字节
  • 不需要初始化向量

ECB

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

优点

  • 不容易被攻击,安全性好
  • 适合传输长度长的报文
  • 是SSL、IPSec的标准

缺点

  • 不利于并行计算
  • 误差会传递
  • 需要初始化向量

特性:

  • 最后一个明文分组需要填充
    • des/3des -> 最后一个分组填充满8字节
    • aes -> 最后一个分组填充满16字节
  • 需要一个初始化向量 - 一个数组
    • 数组的长度: 与明文分组相等
    • 数据来源: 负责加密的人的提供的
    • 加解密使用的初始化向量值必须相同

CBC

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

优点

  • 隐藏了明文模式,密文没有规律
  • 分组密码转化为流模式
  • 可以及时加密传送小于分组的数据

缺点

  • 不利于并行计算
  • 误差传递:一个明文单一损坏影响多个单元
  • 需要初始化向量

特性: 明文分组是和一个数据流进行的按位异或操作, 最终生成了密文

  • 需要一个初始化向量 - 一个数组
    • 数组的长度: 与明文分组相等
    • 数据来源: 负责加密的人的提供的
    • 加解密使用的初始化向量值必须相同
  • 不需要填充

CFB

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

优点:

  • 隐藏了明文模式
  • 分组密码转化为流模式
  • 可以及时加密传送小于分组的数据

缺点:

  • 不利于并行计算
  • 对明文的主动攻击是可能的
  • 误差传送:一个明文单元的损坏影响多个单元

特性: 密文没有规律,明文分组是和一个数据流进行的按位异或操作,最终生成了密文

  • 需要一个初始化向量 - 一个数组
    • 数组的长度: 与明文分组相等
    • 数据来源: 负责加密的人的提供的
    • 加解密使用的初始化向量值必须相同
  • 不需要填充

OFB

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

特性

  • 密文没有规律,明文分组是和一个数据流进行的按位异或操作,最终生成了密文
  • 不需要初始化向量
  • 不需要填充

CTR

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

关于CBC模式中的向量:

在CBC(不光是DES算法)模式下,向量iv通过随机数(或伪随机)机制产生是一种比较常见的方法。iv的作用主要是用于产生密文的第一个block,以使最终生成的密文产生差异(明文相同的情况下),使密码攻击变得更为困难,除此之外iv并无其它用途。最大的好处是,即使相同的明文,相同的密钥,也能产生不同的密文。

对称加密的填充模式

数据填充常见的一般有四种,分别是:

  • NoPadding
  • PKCS5Padding (PKCS7Padding)
  • Zero Padding
  • ISO 10126 Padding
NoPadding

API或算法本身不对数据进行处理,加密数据由加密双方约定填补算法。例如若对字符串数据进行加解密,可以补充\0或者空格,解密后对数据进行trim 处理。

PKCS5Padding (PKCS7Padding)

PKCS5Padding 、PKCS7Padding分别为Java和.Net中的默认填充方式,PKCS5Padding和PKCS7Padding实际只是协议不一样,根据相关资料说明,PKCS5Padding明确定义了加密块是8字节,PKCS7Padding加密块可以是1-255之间。但是封装的DES算法默认都是8字节,所以可以认为他们是一样的。数据补位实际是在数据不满8字节的倍数,才补充到8字节的倍数的填充过程。

加密前:数据字节长度对8取余,余数为m,若m>0,则补足8-m个字节,字节数值为8-m,即差几个字节就补几个字节,字节数值即为补充的字节数,若为0则补充8个字节的8

解密后:取最后一个字节,值为m,则从数据尾部删除m个字节,剩余数据即为加密前的原文

比如:加密字符串为为AAA,差5个字节,则补位为AAA55555;加密字符串为BBBBBB,差2个字节,则补位为BBBBBB22;加密字符串为CCCCCCCC,差0个字节,则补位为CCCCCCCC88888888。

Zero Padding

0填充,顾名思义就是所有不足8位的均补0,不过0填充协议并没有在加密算法中标准化,而且0填充可能会有问题,当明文本身有一个或多个0字节结尾时,就很难区分是填充的0还是原报文。

例如:下面是一个以8字节为单位的加密块,最后四个字节不足位时,使用0来填充

… | DD DD DD DD DD DD DD DD | DD DD DD DD 00 00 00 00 |

ISO 10126

ISO 10126 的填充模式定义了在报文最后一个字节填充之前的字节都可以随机填充,在最后一个字节填充总共补充的字节数。

例如: 下面例子,最后一共需要补充4个字节,前三个字节都是随机填充的字节,最后一个字节需要填充4,表示该填充总共填充了4字节。

… | DD DD DD DD DD DD DD DD | DD DD DD DD 81 A6 23 04 |

何时需要填充,何时不需要填充?

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

总结

以上五种分组模式中,ECB模式很容易被破解,如今已经很少再使用,其余四种分组模式各有千秋。

但极力推荐CBC模式和CTR模式,尤其是CTR模式,不需要填充,代码实现起来很方便。而且加密和解密的方法是一样的,并且可以实现并发分组,效率高,安全性也有保障

参考文章

1,对称加密算法常用的五种分组模式(ECB/CBC/CFB/OFB/CTR)

2,DES填充方式与初始向量IV的作用

3,DES算法的几种加密模式和填补方式

欢迎大家关注「我是开发者FTD」公众号,微信号:ForTheDevelopers

也欢迎大家添加我的个人微信交流,微信号:ForTheDeveloper

关注开发,更关注开发者!

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

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

相关文章

c++创建虚拟串口_linux虚拟串口控制器驱动实现——适用于无开发板学习串口驱动...

在上一章我们已经说明了uart驱动的开发流程,本章我们就不再介绍uart相关的接口实现,仅通过实现一个虚拟的串口控制器程序,用以说明虚拟串口的开发流程。本次开发的虚拟串口提供的功能如下:提供两个串口实例串口名称的前缀为vttyU为…

奇妙的安全旅行之AES算法

hi,大家好,今天开始我们来介绍一下对称加密算法中的AES算法。 AES简介 AES(英语:Advanced Encryption Standard,缩写:AES),即高级加密标准,在密码学中又称Rijndael加密…

axios vue 回调函数_前端Vue 面试题大全

点蓝色字关注“程序员报刊” 「学习 新闻 招聘 」vue的底层原理?vue组件之间的通信?JS中判断数据类型的方法有几种?最常见的判断方法:typeof判断已知对象类型的方法:instanceof根据对象的constructor判断:constructor无敌万能的…

奇妙的安全旅行之RSA算法

hi,大家好,我是开发者FTD。今天我们开始介绍非对称加密算法。非对称加密算法区别于对称加密算法的主要特点是,非对称加密算法有两个密钥:公钥 (public key) 和私钥 (private key)。公钥和私钥是一对密钥,如果用公钥对数…

易语言多级指针读取_C语言指针难吗?纸老虎而已,纯干货讲解(附代码)

作者:21IC网络整理,排版:晓宇微信公众号:芯片之家(ID:chiphome-dy)指针对于C来说太重要。然而,想要全面理解指针,除了要对C语言有熟练的掌握外,还要有计算机硬件以及操作系统等方方面…

奇妙的安全旅行之DSA算法

hi,大家好,我是开发者FTD。今天我们来介绍一下非对称加密算法中的DSA算法。 DSA 算法简介 DSA(Digital Signature Algorithm)是Schnorr和ElGamal签名算法的变种,被美国NIST作为DSS(DigitalSignature Standard) 数字签…

lisp语言画阿基米德线_【R语言】如何将照片快速转换为素描

【R语言】如何将照片快速转换为素描(三行代码给老婆(划掉)画一张素描)_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili​www.bilibili.com最近发现了一个比较好玩的包,叫做sketcher这个包的作用就是将图片转化成素描的样式以下是…

2021年程序员1月薪资统计,你在哪一档?

hi,大家好,我是开发者FTD。2021年1月份马上就要结束了,再过一周多春节也即将来临,春节后估计又是一波跳槽高峰,那我们一起来看一下当前程序员的薪资状况,让大家对于年后是否要换工作也有个心理预期吧。 注&…

海康sip服务器地址_完整SIP/SDP媒体协商概论SDP基础使用要求

接完整SIP/SDP媒体协商概论-SDP基础-核心定义全解。上一个章节笔者介绍了关于SDP的一些核心概念(第一章节和第二章节),今天,我们继续在此之间讨论SDP的其余基础内容(从第三章节开始)。在以下讨论中,笔者会介绍关于SDP的使用,SDP的…

一月:你今年还回家过年吗?

hi,大家好,我是开发者FTD。一月份对于我来说,是工作和生活渐渐明朗的一个月,之前迷茫的状态感觉在这一个月开始慢慢消失,并让整个人的精神状态开始转变。2021年才刚刚开始,大家也可以对自己新的一年进行一个…

6个座位办公室最佳位置_2021最佳动力艇大奖:6个类别29个入围名单揭晓

年度最佳动力艇大奖由英国杂志《Motor Boat & Yachting》(MBY)主办,经(MBY)深思熟虑,评委们缩小了2021年度最佳动力艇大奖的决赛入围名单。由于旅行限制,今年的形式会有所不同,不能像往年一样测试那么多的船。因此&#xff0c…

奇妙的安全旅行之ECC算法

hi,大家好,我是开发者FTD。今天我们来介绍一下非对称加密算法的ECC算法。 ECC 算法简介 ECC 是 Elliptic Curves Cryptography 的缩写,意为椭圆曲线密码编码学。和RSA算法一样,ECC算法也属于公开密钥算法。最初由 Koblitz 和 Mi…

奇妙的安全旅行之国密算法

hi,大家好,我是开发者FTD。今天我们来介绍一下我们国家密码局制定的加密算法 — 国密算法。 为什么要制定国密算法? 密码算法是保障信息安全的核心技术,尤其是我国最关键的银行业核心领域长期以来都是沿用MD5、3DES、SHA-256、R…

Kali Linux—借助 SET+MSF 进行网络钓鱼、生成木马、获主机shell、权限提升、远程监控、钓鱼邮件等完整渗透测试(二)

远控木马 SET 同时集成了木马生成工具,可以生成木马并调用MSF框架对远程主机进行控制。直接使用MSF生成木马并控制主机的可参考之前另一篇博文:渗透测试-Kali入侵Win7主机。 控制主机 1、运行 SET,选择创建攻击载荷和监听器: 2…

wdnas群晖nas_西数WD NAS红盘 WD140EFFX 14TB HDD和 SA500 1TB SSD开箱拆解评测

前言每个NAS系统都应该配备足够容量的硬盘,以满足数据存储需求。WD Red 西数红盘存储空间高达14TB,可以为需要构建大容量和高性能NAS存储方案的用户提供解决方案。WD Red西数红盘14T运行安静且热量低,其采用的NASware 3.0技术提高了兼容性、集…

奇妙的安全旅行之加密算法(完整版)

hi,大家好,我是开发者FTD。之前我在公众号写了一个工作中常用加密算法系列的文章终于肝完了,为了方便小伙伴们查看和收藏,我将这个系列汇集整理成了一个PDF文档,有需要的小伙伴可以关注公众号,在公众号后台…

智能车s3010舵机工作电压_全国大学生智能车竞赛决战南京信息工程大学

未来网高校频道8月25日讯(记者 杨子健 通讯员 唐翠梅 方向 张峰 曾雅俊)8月24日上午,由中国自动化学会主办,南京信息工程大学承办的第十五届全国大学生智能汽车竞赛创意组总决赛、第十五届全国大学生智能汽车竞赛华东赛场预决赛开幕仪式在学校东苑体育馆…

直接拿来用!GitHub10个开源免费的后台管理面板

hi,大家好,我是开发者FTD。今天要给大家介绍几个GitHub上开源免费好用的后台管理面板,大家在平时工作中,一定不可避免的会开发一些业务管理控制后台,如果从零开始完整的做一套不是一件很容易的事情,还好Git…

人名和成绩一起排序_EXCEL基础知识——排序功能的使用

排序筛选可能是大家工作中最常用的数据处理方式了,它能很快地从大到小完成排序,并且筛选除你想要的数据。从简单的排序筛选到高级筛选你会哪几步呢?一起来看看。一、简单排序下面这组数据,我们想要将数学成绩从大到小的排序&#…

android骰子游戏代码_真神器!不用手写一行代码就能做网站~

点击上方“Python编程时光”,选择“加为星标”第一时间关注Python技术干货!制作网站用什么,Dreamweaver 还是 Fireworks?现在,用 GPT-3 就可以。一位来自旧金山的程序员小哥做了款名为 debuild.co 的网页制作软件&…