简化版流程


3.1 数据加密标准DES

DES算法将明文按64位分组,使用的密钥长度为64位(实际参与加密的有56位)。

密钥的第8、16、24、…、64位作为校验位,不参与加密

DES的加密思想是对密钥和明文都进行一系列复杂变换处理,中间分为多个小段单独异或加密,最后再合成变换得到最终密文。符合所谓的混淆原则和扩散原则。

混淆原则:密文与其对应的明文与密钥的关系足够复杂。

扩散原则:密文中的每一位都受到明文和密钥中的尽可能多位的影响,以隐蔽明文

的统计特性和结构规律。

3.1.1 子密钥

DES中的密钥不是直接使用的,要经过一系列变换才能拿去跟明文做异或。

  1. 提取有效位(56位)

    DES中密钥的转换表(DesTransform[56])

    把64位密钥提取出56位。(去除校验位)

    后续会用到各种转换表,这里简单解释一下,比如第一行第一列的“57”,意思就是把原本数据表中第57个数据填到转换后的新表中的第一行第一列这个位置。

  2. 旋转左移,16种结果

    针对DES子密钥每一轮的旋转次数(Round轮,Rotations旋转次数)(DesRotations)

    为了得到16个不同的子密钥,先将上一步得到的56位密钥分为两组各28位,接着根据该旋转表,分别旋转左移对应位数,旋转完再合并,这样就得到一组新子密钥,而下一组是在前一组的基础上再次对半分并旋转左移获得的。最终生成16组子密钥。

  3. 置换选择

    DES子密钥的置换选择(Despermuted[48])

    其实就是进一步缩小密钥位数。把上一步获得的16组子密钥分别通过该转换表。

于是,我们得到了16组各48位的子密钥。

3.1.2 加密解密

明文按照64位一组分组。以下操作针对一组64位的明文。

  1. 初始置换

    DES中数据的初始置换(DesInitial[64])

    先将明文按转换表打乱初始化,并将处理后的数据分为两组各32位,记为L0和R0。

  2. 扩展置换

    DES中数据块的扩展置换(DesExpansion[48])

    将Ri由32位转换扩展到48位。

    目的是在加密数据的过程中制造一些雪崩效应

    使用数据块中的1位,将在下一步操作中影响更多位,从而产生扩散效果

  3. XOR

    一旦扩展置换完成,便将所得48位数据Ri与先前的子密钥Ki做XOR异或运算。

    迭代16次,每次使用对应次序的子密钥。

  4. S盒替换

    S盒替换表一共有8个。主要作用是重新把48位数据压缩为32位。

    S盒为数据增加了不确定性,从而提升了安全性。

    将上一步扩展后获得的48位数据Ri按6位一组,分成8组。

    例:

    假设我们取第一组数据按上图处理,得到第三行,第15列,则在第一张S盒替换表中找到对应位置的数,这里我们假设找到的数是13,便再将其转换为二进制数1101,这样,便完成了6位数据压缩为4位数据的过程。

  5. P盒置换

    DES中数据块的P盒置换

    将上一步获得的32位数据经过P盒置换表。

  6. 两组异或

    从第2步到第5步的操作定义为一个函数f。假设我们回到一开始获得的 R 0 R_0 R0​,经过函数f后,输出的应该是一组32位的数据,我们设其为 R 0 ′ R_0' R0′​。接下来的操作就是将一开始的另一组数据 L 0 L_0 L0​与 R 0 ′ R_0' R0′​进行XOR异或操作,结果值设为 L 0 ′ L_0' L0′​。

  7. 交换

    现在,经过一系列变换,我们有了新的左右分组 L 0 ′ L_0' L0′​和 R 0 ′ R_0' R0′​,于是,我们交换两组的位置,即设 R 1 = L 0 ′ R_1=L_0' R1​=L0′​, L 1 = R 0 ′ L_1=R_0' L1​=R0′​。

  8. 迭代

    分组 L i L_i Li​和 R i R_i Ri​重复第2步到第7步的操作,总共要完成16轮的迭代。其中,最后一轮中左右分组不用交换。

    第16轮的 R 16 R_{16} R16​在左边, L 16 L_{16} L16​在右边。

  9. 连接

    将最后得到的左分组和右分组重新合并,得到一组64位数据。

  10. 最终置换

    DES中数据块的最终置换

    最终置换其实就是初始置换的逆转换。数据经过该转换表得到最终结果。

总结:

对于这第1步到第10步,如果输入的是明文,输出就是密文;如果按照从最后一步倒回来输入密文,输出就是明文。

加密过程:
1、以K1加密
2、以K2解密
3、以K3加密
解密过程(密钥顺序及应用方向与加密过程相反):
1、以K3解密
2、以K2加密
3、以K1解密
说明:K1、K2、K3是密钥。

整个流程可以用下图表示:


参考资料:

数据加密算法–详解DES算法原理与实现

DES加密算法-《信息安全技术》课程微课设计


DES加密算法原理简介相关推荐

  1. DES加密算法原理及代码实现

    目录 一.简要描述 二.名词解释 数据填充 分组加密 算法特点 置换 三.加密运算 1.加密运算流程图 2.初始置换 ​ 3.生成子秘钥 PC-1置换 ​ PC-2置换 4.迭代的过程(f函数) f函 ...

  2. 通俗易懂,十分钟读懂DES,详解DES加密算法原理,DES攻击手段以及3DES原理。Python DES实现源码

    文章目录 1.什么是DES 2.DES的基本概念 3.DES的加密流程 4.DES算法步骤详解 4.1 初始置换(Initial Permutation,IP置换) 4.2 加密轮次 4.3 F轮函数 ...

  3. MD5、RSA、DES加密算法原理解析

    文章转自:http://www.iplaysoft.com/encrypt-arithmetic.html MD5的全称是Message-Digest Algorithm 5,在90年代初由MIT的计 ...

  4. DES的原理及python实现

    DES加密算法原理及实现 DES是一种对称加密算法[即发送者与接收者持有相同的密钥],它的基本原理是将要加密的数据划分为n个64位的块,然后使用一个56位的密钥逐个加密每一个64位的块,得到n个64位 ...

  5. 加密算法概念简介--MD5、SHA、DES、3DES、AES、RSA、ECC

    MD5        MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致.是计算机广泛使用的杂凑算法之一(又译摘要算法.哈希算法),主流编程语言 ...

  6. 算法科普:神秘的 DES 加密算法

    1 前言 DES 算法是一种常见的分组加密算法,由IBM公司在1971年提出.DES 算法是分组加密算法的典型代表,同时也是应用最为广泛的对称加密算法.本文将详细讲述DES 的原理以及实现过程. 1. ...

  7. HTTPS 加密算法原理详解

    本文讲的是HTTPS 加密算法原理详解, 前言 HTTPS(全称:HyperText Transfer Protocol over Secure Socket Layer),其实 HTTPS 并不是一 ...

  8. Linux安全原理简介

    Linux安全原理简介 介绍 在设置Linux计算机的所有阶段,安全性应是首要考虑之一.要在计算机上实施良好的安全策略,需要对Linux的基础知识以及所使用的某些应用程序和协议有充分的了解. Linu ...

  9. DES加密算法的C++实现

    <信息安全技术>这门课又在讲 DES 加密算法了,以前用纯C写过一次,这次我用 C++ 重新写了一个,写篇文章以备后用.本文介绍了 DES 算法加密的大致步骤和整体流程. 一.DES算法原 ...

最新文章

  1. 机器学习(5)--化无限为有限
  2. Android而一个超级漂亮的日历控件
  3. 随机森林与梯度提升树
  4. 怎么在pycharm打开浏览器_Mac OS下搭建 python3+pycharm+selenium+Chrome环境
  5. leetcode129. 求根到叶子节点数字之和
  6. shell读取php 数组长度,shell数组的定义、数组长度
  7. python查找最长的字符串_Python简单实现查找一个字符串中最长不重复子串的方法...
  8. 在线CSV转SQL工具
  9. 网络助手之NABCD
  10. 杨辉三角数学性质及参考例题
  11. 关于亿图图示缩放锁定1%的问题
  12. 实战|朝阳医院药品销售分析案例
  13. 关于舵轮AGV 的数学模型
  14. springboot集成jooq异常集合
  15. 《邪不压正》里面究竟谁是真正的隐侠,蓝青峰究竟是正是邪?
  16. 大学计算机协会大一面试,大一学生社团面试自我介绍
  17. 计算机专业考研是英语几,计算机考研考英语一还是英语二
  18. sudo: /usr/bin/sudo must be owned by uid 0 and have the setuid bit set的解决方案(linux)
  19. 【PMBOK重点知识】工作绩效数据、工作绩效信息、工作绩效报告之间的区别和关系
  20. 手机端input控制键盘弹出

热门文章

  1. pecs_泛型的PECS原则
  2. VS2010 安装 Boost 库 1.54
  3. maven本地私服的搭建
  4. 过来人聊聊眼中的普通码农和技术大牛的区别
  5. Oracle 删除表中记录 如何释放表及表空间大小
  6. 转速环PI参数整定详解(一)——电机传递函数的来源
  7. Segment Anything Model(SAM)
  8. Android入门简单吗
  9. Next middleware
  10. 按日期倒序排列,为空放在最上方展示