当前位置: 首页 > article >正文

【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

http://www.kler.cn/a/488340.html

相关文章:

  • 初学者关于对机器学习的理解
  • Vue3(elementPlus) el-table替换/隐藏行箭头,点击整行展开
  • Centos7 解决Maven scope=system依赖jar包没有打包到启动jar包中的问题(OpenCV-4.10)
  • WebSocket监听接口
  • Qt 界面外观
  • 2025最新解决方案:新买的mac鼠标和这个触控板反向
  • el-date-picker日期时间选择器的选择时间限制到分钟级别
  • uniapp页面高度设置(铺满可视区域、顶部状态栏高度、底部导航栏高度)
  • 51单片机——串口通信(重点)
  • 深入解析 Python 2 与 Python 3 的差异与演进
  • 【Python】Python之Selenium基础教程+实战demo:提升你的测试+测试数据构造的效率!
  • [研发效率]什么是软件工程生产力
  • 【Go】:图片上添加水印的全面指南——从基础到高级特性
  • 【Linux】gawk编辑器
  • Python Matplotlib 教程-Matplotlib 如何绘制常见图表
  • 信息科技伦理与道德3:智能决策
  • C++二十三种设计模式之解释器模式
  • 【c++实战项目】负载均衡式在线OJ
  • C#里使用libxl读取EXCEL文件的例子
  • 在Ubuntu中使用systemd设置后台自启动服务
  • ffmpeg7.0 aac转pcm
  • Docker入门篇[SpringBoot之Docker实战系列] - 第534篇
  • 商品详情API接口数据解析,API接口系列(示例返回数据(JSON格式))
  • THB6128安森美步进电机驱动芯片
  • leetcode 面试经典 150 题:两数之和
  • 算法题(31):两数之和-输入有序数组