DES加密算法

news2024/9/29 21:32:28

DES算法原理

  1. 对称密码算法中的分组加密算法(对应于流密码

  2. 密钥64位,56位参与运算+8位校验位(校验位为:8、16、24、32、40、48、56、64)

加密原理

在这里插入图片描述

1. IP置换

将明文数据转化为二进制数,并将它们按照每64bit/组分开。IP置换就是通过按照初始置换表中对应的索引找到对应的64bit中的索引值进行替换,例子如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QaajUTRW-1675004582902)(DES加密算法.assets/image-20220304170023805.png)]

2. 轮函数

经过简单的变化位置后就来到了DES算法的核心加解密数据块区,全局加密流程如下图,图中可以看到由经过初始置换后的64bit -> 2组 * 32bit,然后以组32bit进行操作

在这里插入图片描述

2.1 E扩展置换

将32bit数据 -> 8组 * 4bit再对每组的首位增添1bit,其中首bit一组的最后一bit,尾bit一个组的首个bit,使最后的数据扩展为8组 * 6bit 也就是48bit,这样就完成了对32bit扩展置换为48bit。具体如图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s071vak4-1675004582904)(DES加密算法.assets/DES扩展置换E.jpg)]

2.2 S盒压缩处理

经过扩展后的48bit再通过与48位的子密钥(加密算法开始接触密钥,在这之前用于加解密的key也已经通过加密算法生成了一个密钥)进行异或处理。

将异或后的48bit进行分组 -> 8组 * 6bit ,对每组的6bit压缩成为4bit,具体实现如图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AY082TOF-1675004582906)(DES加密算法.assets/image-20220304172438235.png)]

根据上面的计算得到了坐标为(3,15)的数据,那么再根据S盒表进行查找得到对应的码表值,部分S盒表如图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-c2HQmM5Y-1675004582909)(DES加密算法.assets/image-20220304173407259.png)]

(8次轮函数加密对应S1-S8

根据坐标找到的值为13,将13(十) —> 1101(二),那么bin(“111111”) -> S盒压缩后 -> bin(“1101”) ,这样就完成了一轮压缩,由进入压缩前的48bit -> 32bit 。但是不会马上进入到第二轮而是进入到P盒置换

2.3 P盒置换

P盒置换和第一次的IP置换一样根据表中的值填入数据的索引值,如图:

在这里插入图片描述

那么此时32bit的数据经过移位置换操作后,再通过8次S盒压缩处理,最后将该32bit数据(已轮加密后)对L0(L0是首次对64bit数据分出来的一组数据32bit)进行异或就得到R1 即 $ R_1= L_0\ xor f(R_0,k) $ (f(R0,k)表示通过密钥轮加密的值) 这样就完成了第一轮函数加密 ,按照 L 1 = R 0 L_1 = R_0 L1=R0,$ R_1= L_0\ xor f(R_0,k) $ 每次下标自增1在经过16次轮加密后(也就是 L 16 = R 15 L_{16} = R_{15} L16=R15,$ R_{16}= L_{15}\ xor f(R_{15},k) $)就得到了R16 和L16 完成16轮迭代

3. 逆置换

最后通过和首次的置换方法一样通过如下表中的值对数据进行索引取值,再进行替换最终得到明文64bit加密后的密文64bit完成一组加密。逆置换表如图:

在这里插入图片描述

密钥生成

在对一个明文使用DES加密时需要一个密钥,而这个密钥同样用于解密密文

密钥生成流程图:

在这里插入图片描述

  1. 首先经过如下图PC-1表,进行置换前去掉校验位(8、16、24、32、40、48、56、64)也就是每组的最后一个bit被去掉,得到56bit(可以看到PC-1表中并没有校验位的索引)

在这里插入图片描述

  1. 再通过对56bit进行分组为 2 * 28bit 表示为CiDi分别对2组的数据进行移位操作,如图移位次数表。对应下列表中的左移值可得出 C 1 = C 0 < < 1 C_1 = C_0 << 1 C1=C0<<1 同理 D 1 = D 0 < < 1 D_1 = D_0 << 1 D1=D0<<1

在这里插入图片描述

  1. 得到C1 和 D1后将C1D1的二进制拼接后得到一个56bit值,通过如图PC-2表进行置换,从表中可以注意到PC-2表只有48位,从而也就将56bit压缩成了48bit最终得到k1

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t25hyeRv-1675004582920)(DES加密算法.assets/image-20220304200826311.png)]

  1. 整体流程梳理图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qZmq6m02-1675004582922)(DES加密算法.assets/image-20220304202110925.png)]

经过上图中的迭代重复16次后即可得到k1 -k16的数据作为最终的密钥,再配合算法进行明文加密

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

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

相关文章

Lnix文件权限的修改

首先我们要清楚Linux文件的权限信息 在Linux中输入ls -l 或者 ll查看文件和目录的详细信息 文件详情实例中&#xff0c;a目录的第一个属性用“d”标识这个a是一个目录。 anaconda-ks.cfg第一个属性用“-”标识他是一个文件。 在Linux文件详情的后面属性需要分为三组查看 rwx&am…

三种调用机制: 同步调用、异步调用、回调(同步/异步)

c并发编程-01-并发与并行_发如雪-ty的博客-CSDN博客 c并发编程02-什么是I/O_发如雪-ty的博客-CSDN博客 c并发编程03-I/O多路复用_发如雪-ty的博客-CSDN博客 c并发编程04-同步与异步_发如雪-ty的博客-CSDN博客_c同步和异步 c并发编程05-什么是回调函数_发如雪-ty的博客-CSDN…

Web前端:使用ReactJS构建的应用类型

使用ReactJS&#xff0c;你可以构建各种各样的应用程序&#xff0c;包括单页应用程序、渐进式web应用程序、移动应用程序、仪表板、电子商务平台、企业web应用程序以及社交媒体和消息应用程序。1.单页应用程序(spa)单页应用程序(SPA)基本上是一个网页&#xff0c;它通过使用从w…

MySQL(七):undo日志——保证事务的原子性

目录一、前言1.1 如何回滚事务1.2 事务id1.3 roll pointer 隐藏列1.4 trx_id 隐藏列二、undo日志2.1 undo日志的格式2.2 insert 对应的undo日志2.3 delete 操作对应的undo日志2.4 update操作对应的undo日志2.5 Undo页面链表2.6 undo日志写入过程2.6.1 Undo Log Header2.7 回滚段…

springboot请求参数绑定原理篇

上篇文章写了SpringBoot 参数接收只看这一篇文章就够了&#xff0c;只是写了使用方法&#xff0c;没有写为什么&#xff0c;原理是什么&#xff0c;这篇文章也是之前的预先的计划&#xff0c;稍微花点时间整理下&#xff0c;知其然知其所以然&#xff0c;才算是能彻底掌握&…

如何用IDEA创建SpringBoot项目

一、创建一个 Spring Initializr 工程 next后选择2.7.8版本&#xff0c;勾选以下几个 Web里的spring bootTemplate Engines 里的 ThymeleafSQL里的MyBatis Framework 和 Mysql Driver 然后finish完成 二、配置resources文件 2.1、 application.properties&#xff1a; #??…

Docker容器命令无权限,WEB访问403

问题背景(描述) 部署dockerWeb后&#xff0c;重启访问403,详细如下 docker容器正常运行,且开机自启 #通过如下命令开机自启 docker update --restart always 容器id但是访问web服务出现403. 进入容器后,输入命令提示如下: 解决方案 关闭selinux SELinux(Security-Enhanced…

【网络安全】记一次红队渗透实战项目

前言 【一一帮助安全学习&#xff08;网络安全面试题学习路线视频教程工具&#xff09;一一】 一、信息收集 信息收集非常重要&#xff0c;有了信息才能知道下一步该如何进行&#xff0c;接下来将用nmap来演示信息收集 1、nmap扫描存活IP 由于本项目环境是nat模式需要项目…

【Java基础】——面向对象:封装

【Java基础】——面向对象:封装一、类和对象二、类的结构&#xff1a;属性、方法、构造器1、属性2、方法2.1、方法的定义2.2、方法的重载2.3、可变个数的形参2.4、方法参数的值传递机制3、构造器3.1、构造器的特征3.2、构造器的作用&#xff1a;3.3、构造器重载三、封装与隐藏1…

细菌,真菌,病毒——感染,免疫反应以及治疗用药差异

谷禾健康 与人类密切相关的微生物 我们的世界大到浩瀚宇宙&#xff0c;小到微观下的生物分子。我们总说漫天繁星&#xff0c;其实身边微生物数量可能更多。动物、植物、真菌、细菌、病毒等&#xff0c;共同构成了丰富多彩的生命世界。 细菌、真菌、病毒是其中的三个大类&#x…

spring integration使用:消息路由

系列文章目录 …TODO spring integration开篇&#xff1a;说明 …TODO spring integration使用&#xff1a;消息路由 spring integration使用&#xff1a;消息路由系列文章目录前言消息路由的概念二、路由的分类基于内容的路由器spring integration中的实现RecipientListRoute…

Python property()函数:定义属性

我们一直在用“类对象.属性”的方式访问类中定义的属性&#xff0c;其实这种做法是欠妥的&#xff0c;因为它破坏了类的封装原则。正常情况下&#xff0c;类包含的属性应该是隐藏的&#xff0c;只允许通过类提供的方法来间接实现对类属性的访问和操作。因此&#xff0c;在不破坏…

AOP的四种增强方式

1. 前置增强&#xff0c;在核心功能之前执行的额外功能 public class MyBeforeAdvice implements MethodBeforeAdvice{Overridepublic void before(Method arg0, Object[] arg1, Object arg2) throws Throwable {System.out.print("this is my before advice!");Str…

渲染函数render

文章目录节点、树以及虚拟 DOM树节点虚拟 DOMvue中render函数的作用render函数去创建子组件内容createElement官方文档参考节点、树以及虚拟 DOM 在深入渲染函数之前&#xff0c;了解一些浏览器的工作原理是很重要的。以下面这段 HTML 为例&#xff1a; <div><h1>…

user-select:none真的能禁止文本的复制粘贴吗?

1. 前言 面向搜索引擎开发时&#xff0c;我们经常看到这样的情况&#xff1a;登录后复制。 由于设置了css属性 user-select:none&#xff0c;此时鼠标无法实现选中文本&#xff0c;也就无法复制文本&#xff0c;通常会采用这种方式来禁止复制文本。打开开发者工具-审查元素&am…

k-means聚类

一、概述 当前人工智能技术实现的一种主要手段是机器学习&#xff0c;而机器学习能够解决的问题主要有三种&#xff1a;分类、聚类、回归&#xff0c;有监督的是分类&#xff0c;无监督的是聚类。所谓聚类&#xff0c;就是以一定的方法将一堆样本依它们本身的数据特性划分成不同…

docker安装mongdb

MongoDB是一个介于关系数据库和非关系数据库之间的产品&#xff0c;是非关系数据库当中功能最丰富&#xff0c;最像关系数据库的。它支持的数据结构非常松散&#xff0c;是类似json的bson格式&#xff0c;因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非…

【操作系统】备忘录

进程上下文切换 用户态、内核态 内核态&#xff1a;也叫内核空间&#xff0c;是内核进程/线程所在的区域。主要负责运行系统、硬件交互。 用户态&#xff1a;也叫用户空间&#xff0c;是用户进程/线程所在的区域。主要用于执行用户程序。 内核态与用户态的区别 内核态与用户…

spring mvc文档阅读笔记——02

目录标题一、Asynchronous Requests&#xff08;异步请求&#xff09;&#xff08;一&#xff09;阻塞和非阻塞,同步和异步&#xff08;二&#xff09;DeferredResult&#xff08;三&#xff09;Callable二、跨域请求CORS&#xff08;一&#xff09;实现跨域请求的方式&#xf…

数据持久化-RDB-AOF

定义 将数据从掉电易失的内存放到永久储存的设备上 因为所有的数据都在内存是&#xff0c;所有必须得持久化 redis提供两种持久化方案 RDB默认开启、AOF RDB 1,保存真是的数据 2&#xff0c;将服务器包含的所有数据库数据以二进制文件形式保存到磁盘里面 3&#xff0c;默认…