【DES加密】

什么是DES

DES(Data Encryption Standard) 是一种对称加密算法。它的设计目标是提供高度的数据安全性和性能。

DES的概念

DES使用56位的密钥和64位的明文块进行加密。DES算法的分组大小是64位,因此,如果需要加密的明文长度不足64位,需要进行填充;如果明文长度超过64位,则需要使用分组模式进行分组加密

DES的加密流程

在这里插入图片描述

  1. 初始置换(Initial Permulation,IP置换):
    将64位明块进行重新排列,生成新的64未明文块。

  2. 16轮次加密:
    DES加密算法共有16个轮次,每个轮次都包含以下六个步骤:
    a. 将64位数据块分为左右两个32位块。
    b. 右侧32位作为输入,扩展到48位,然后与轮密钥进行 ⊕ \oplus 运算,再经过S盒置换压缩 得到32位的数据块。
    c. P盒置换,输出32位数据块。
    d. c步骤的输出与左侧的32位数据块进行 ⊕ \oplus ,得到本轮次的右边32位数据块的输出。
    e. a步骤得到的右侧32位数据块作为本轮次的左侧数据块输出。
    f. 拼接e,d的输出得到本轮次的加密输出。

  3. 末置换(Final Permutation):
    在最后一个轮次完成后,将经过加密的数据块进行置换,得到最终的64位密文。

    总的来说,DES加密的过程就是通过一系列置换、异或、扩展等运算,将明文分成若干个小块,然后根据主密钥生成一系列的轮密钥,利用轮密钥对每个小块进行加密,最终将加密结果重新组合成一个整体,得到密文。

DES算法加密步骤详解

  1. 初始置换
    IP置换是将输入的64位明文块进行置换和重新排列,生成新的64位数据块。我们将把64位的顺序按下表中规定的顺序放置,图中的数字是在64位明文中每个比特的索引位置。

    IIIIIIIVVVIVIIVIII
    585042342618102
    605244362820124
    625446383022146
    645648403224168
    57494133251791
    595143352719113
    615345372921135
    635547393123157

    目的:增加加密的混乱程度,使明文中的每一位都能够对后面的加密过程产生影响,提高加密强度。

  2. 加密轮次

    初始置换完成后,明文被划分成了相同长度(32位)的左右两部分,记作L0,R0。接下来就会进行16个轮次的加密了。

    以第一轮次的加密为例,过程如下:
    在这里插入图片描述
    从上图可以看出:右边的部分的R0会作为下一轮次的左半部分L1的输入。R0先补位到48位和本轮次的密钥K1进行 ⊕ \oplus ,之后经过S盒置换得到32位的数据块,再经过P和置换,最后与L0进行 ⊕ \oplus ,得到的结果作为下一轮的R1。上面的过程可以使用以下公式表示:

    R i = ( 48 R i − 1 ⊕ K i ) ⊕ L i − 1 L i = R i − 1 \begin{aligned} R_i&=(_{48}R_{i-1} \oplus K_{i})\oplus L_{i-1}\\ L_i&=R_{i-1} \end{aligned} RiLi=(48Ri1Ki)Li1=Ri1

    详细步骤如下:

    1. 扩展R到48位
      将32位的R0通过以下表格中的规则扩展到48位。

      IIIIIIIVVVI
      3212345
      456789
      8910111213
      121314151617
      161718192021
      202122232425
      242526272829
      28293031321
    2. 生成子密钥
      DES算法采用了每轮子密钥生成的方式来增加密钥的复杂性和安全性。每轮子密钥都是由主密钥(64位)通过密钥调度算法(Key Schedule Algorithm)生成的。DES算法的密钥调度算法可以将64位的主密钥分成16个子密钥,每个子密钥48位,用于每轮加密中与输入数据进行异或运算。
      通过子密钥生成的流程图来看下整个过程。

      在这里插入图片描述
      a. 将64位的主密钥通过PC-1置换表进行置换,得到56位的数据块。
      b. 将56位的数据块分成两个28位的数据块,分别为C0和D0。
      c. 将C0和D0分别左移1位或2位,得到C1和D1。
      d. 将C1和D1合并成56位的数据块,通过PC-2置换表进行置换,得到48位的子密钥K1。
      e. 重复c和d步骤,得到16个子密钥。
      注意:

      • PC-1置换表如下:

        IIIIIIIVVVIVIIVIIIIXXXIXIIXIIIXIVXVXVI
        57494133251791585042342618102
        5951433527191136052443663554739
        312315762544638302214661534537
        2921135282012412345678
      • PC-2置换表如下:

        IIIIIIIVVVIVIIVIIIIXXXIXIIXIIIXIVXVXVI
        141711241532815621102319124
        26816727201324152313747553040
        51453348444939563453464250362932
      • 左移位数表如下:

        IIIIIIIVVVIVIIVIIIIXXXIXIIXIIIXIVXVXVI
        1122222212222221
    3. 当前轮次的密钥与扩展后的R进行异或运算
      将扩展后的R0与当前轮次的密钥Ki进行异或运算,得到48位的数据块。

    4. S盒置换(Substitution Box Substitution)
      将上一步得到的48位数据块分成8个6位的数据块,每个6位数据块作为S盒的输入,经过S盒置换后,得到4位的数据块。
      S盒是一个4行16列的表,每个S盒都有一个特定的输入和输出。S盒的输入是6位的数据块,输出是4位的数据块。S盒的作用是将输入的6位数据块映射到4位的数据块,从而实现数据的压缩。
      举个例子:输入100011,第一位和最后一位组成一个二进制数1001,即9,作为S盒的行数;中间的4位组成一个二进制数0001,即1,作为S盒的列数。在S盒中找到第9行第1列的元素,即为14,转换为二进制为1110,即为S盒的输出。
      注意: S盒子的行列号是从0开始的。

      S盒的具体内容如下:

      IIIIIIIVVVIVIIVIIIIXXXIXIIXIIIXIVXVXVI
      S盒1:
      1441312151183106125907
      0157414213110612119538
      4114813621115129731050
      S盒2:
      1518146113497213120510
      3134715281412011069115
      4114813621115129731050
      1512824917511314100613
      S盒3:
      1009146315511312711428
      1370934610285141211151
      1364981530111212510147
      1101306987415143115212
      S盒4:
      7131430691012851112415
      1381156150347212110149
      1069012117131513145284
      3150610113894511127214
      S盒5:
      2124171011685315130149
      1411212471315015103986
      4211110137815912563014
      1181271142136150910453
      S盒6:
      1211015926801334147511
      1015427129561131401138
      9141552812370410113116
      4321295151011141760813
      S盒7:
      4112141508133129751061
      1301174911014351221586
      1411131237141015680592
      6111381410795015142312
      S盒8:
      1328461511110931450127
      1151381037412561101492
      7114191214206101315358
      2114741081315129035611
    5. P盒替换
      将上一步得到的32位数据块通过P盒子进行置换,得到32位的数据块。
      P盒子置换表如下:

      IIIIIIIVVVIVIIVIII
      167202129122817
      11523265183110
      282414322739
      19133062211425
  3. 逆置换(Inverse Permutation)
    在经过16轮次计算后,DES会对最后的结果进行最后一次置换。即为最后的输出结果。置换表如下:

    IIIIIIIVVVIVIIVIII
    408481656246432
    397471555236331
    386461454226230
    375451353216129
    364441252206028
    353431151195927
    342421050185826
    33141949175725

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【FPGA】时序约束与分析

设计约束 设计约束所处环节: 约束输入 分析实现结果 设计优化 设计约束分类: 物理约束:I/O接口约束(例如引脚分配、电平标准设定等物理属性的约束)、布局约束、布线约束以及配置约束 时序约束:设计FP…

docker搭建atlassian-confluence:7.2.0

文章目录 引言I 部署前准备数据库镜像准备自己构建镜像dockerhub第三方镜像II 安装启动容器基础配置(获取服务器ID)授权码获取集群选择设置数据库配置管理员账号引言 准备数据库、镜像启动容器获取服务器ID根据服务器ID等信息,基于atlassian-agent.jar 授权I 部署前准备 数…

征战越南电商直播,SD - WAN 专线赋能企业带货新征程

在当今数字化商业浪潮中,越南电商市场正经历着蓬勃发展与激烈变革。根据 Sapo Technology Joint Stock Company 对全国 15,000 名卖家的深度调查,2024 年零售业务的直播领域呈现出多元竞争态势。Facebook Live 强势占据多渠道或仅在线销售卖家总直播会话…

软件测试之黑盒测试

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 概念与定义 黑盒测试:又称功能测试、数据驱动测试或基于需求规格说明书的测试。通过黑盒测试来检测每个功能是否都能正常使用。黑盒测 试把测试对象看…

熵与交叉熵:从不确定性角度理解 KL 散度

从不确定性减少视角理解KL散度 【 Transformer 系列,故事从 d k \sqrt{d_k} dk​ ​说起】 LLM这么火,Transformer厥功甚伟,某天心血来潮~,再去看看! 它长这个样子: 深入浅出 Transformer 看完后&#xff…

【Unity3D】导出Android项目以及Java混淆

Android Studio 下载文件归档 | Android Developers Android--混淆配置(比较详细的混淆规则)_android 混淆规则-CSDN博客 Unity版本:2019.4.0f1 Gradle版本:5.6.4(或5.1.1) Gradle Plugin版本&#xff…

vue3 + ts + element-plus(el-upload + vuedraggable实现上传OSS并排序)

这里创建项目就不多说了 安装element-plus npm install element-plus 安装vuedraggable npm install vuedraggable 安装ali-oss npm install ali-oss 这里是封装一下:在components创建文件夹jc-upload>jc-upload.vue 在封装的过程中遇到了一个问题就是dr…

如何在 Linux系统用中挂载和管理磁盘分区

在 Linux 系统中,挂载和管理磁盘分区是系统管理的基本任务之一。以下是详细步骤,帮助你完成这一过程。 1. 查看现有磁盘和分区 首先,使用以下命令来查看系统中的磁盘和分区: bash 复制 lsblk或者使用: bash 复制…

Opencv图片的旋转和图片的模板匹配

图片的旋转和图片的模板匹配 目录 图片的旋转和图片的模板匹配1 图片的旋转1.1 numpy旋转1.1.1 函数1.1.2 测试 1.2 opencv旋转1.2.1 函数1.2.2 测试 2 图片的模板匹配2.1 函数2.2 实际测试 1 图片的旋转 1.1 numpy旋转 1.1.1 函数 np.rot90(kl,k1),k1逆时针旋转9…

【YOLOv8杂草作物目标检测】

YOLOv8杂草目标检测 算法介绍模型和数据集下载 算法介绍 YOLOv8在禾本科杂草目标检测方面有显著的应用和效果。以下是一些关键信息的总结: 农作物幼苗与杂草检测系统:基于YOLOv8深度学习框架,通过2822张图片训练了一个目标检测模型&#xff…

vue3 react使用高德离线地图,最新解决内网情况首次不能加载离线地图2025年1月10日

下载离线资源 下载地址 https://download.csdn.net/download/u010843503/90234612 2、部署私有化瓦片资源 ngxin中配置如下 server{listen 18082;server_name localhost;location / {root D:/GisMap/_alllayers;#try_files $uri $uri/ /index.html;#index index.html;} }下载…

Hbuilder ios 离线打包sdk版本4.36,HbuilderX 4.36生成打包资源 问题记录

1、打包文档地址https://nativesupport.dcloud.net.cn/AppDocs/usesdk/ios.html#%E9%85%8D%E7%BD%AE%E5%BA%94%E7%94%A8%E7%89%88%E6%9C%AC%E5%8F%B7 2、配置应用图标 如果没有appicon文件,此时找到 Assets.xcassets 或者 Images.xcassets(看你sdk引入的启动文件中…

Unity中 Xlua使用整理(二)

1.Xlua的配置应用 xLua所有的配置都支持三种方式:打标签;静态列表;动态列表。配置要求: 列表方式均必须是static的字段/属性 列表方式均必须放到一个static类 建议不用标签方式 建议列表方式配置放Editor目录(如果是H…

【计算机网络】课程 实验二 交换机基本配置和VLAN 间路由实现

实验二 交换机基本配置和VLAN 间路由实现 一、实验目的 1.了解交换机的管理方式。 2.掌握通过Console接口对交换机进行配置的方法。 3.掌握交换机命令行各种模式的区别,能够使用各种帮助信息以及命令进行基本的配置。 4&…

【数据结构:前缀树Trie】

目录 前言前缀树介绍和应用一、前缀树的定义前缀树的问题和思考前缀树的映射思想前缀树三大性质 二.前缀树节点结构三. 前缀树接口介绍和实现四个接口API1. insert(String word)2. search(String word)3. startsWith(String pre)4. delete(String word) API实现1. 查询操作sear…

Jenkins触发器--在其他项目执行后构建

前言: jenkins中有多种触发器可用,可以方便的控制构建的启动 这里简单介绍下项目后构建的配置方法 1. 解释: Build after other projects are built Set up a trigger so that when some other projects finish building, a new build is…

Linux(18)——提高命令行运行效率

目录 一、创建和执行 shell 脚本: 1、命令解释器: 2、执行 Bash Shell 脚本: 3、从 shell 脚本提供输出: 二、对特殊字符加引号: 1、反斜杠 (\): 2、单引号 ( &…

软件系统安全逆向分析-混淆对抗

1. 概述 在一般的软件中,我们逆向分析时候通常都不能直接看到软件的明文源代码,或多或少存在着混淆对抗的操作。下面,我会实践操作一个例子从无从下手到攻破目标。 花指令对抗虚函数表RC4 2. 实战-donntyousee 题目载体为具有漏洞的小型软…

计算机网络 (33)传输控制协议TCP概述

一、定义与基本概念 TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议。它工作在OSI模型的第四层,即传输层,为用户提供可靠的、有序的和无差错的数据传输服务。TCP协议与UDP协议是传输层的两大主要协议,但两者在设计上有明显的不同&…

【从0带做】基于Springboot3+Vue3的高校食堂点餐系统

大家好,我是武哥,最近给大家手撸了一个基于SpringBoot3Vue3的高校食堂点餐系统,可用于毕业设计、课程设计、练手学习,系统全部原创,如有遇到网上抄袭站长的,欢迎联系博主~ 详细介绍 https://www.javaxm.c…