DES

Data Encryption Standard,又称数据加密标准,是一种对称加密算法,也是密码学摆脱古典流加密后最简单的一种块加密算法。由于香农与1949年提出“完善保密性”,该标准要求密钥长度不短于明文长度,实际操作难以达到,因此DES使用了块加密,选择牺牲一定程度的“完善保密性”来降低密钥的长度。

核心结构:

上图为DES的整体结构,Feistel 网络,每一小块的变化被称为一回合,DES总计16回合,3DES有48回合,AES有10回合。
由上图可知,先将加密信息对等分成一半,每一个回合都要将R代入F函数(费斯妥函数,下面会讲到)中,得出结果后与L进行异或操作,再与L互换位置。
另外,次结构为可逆结构,只要知道在F函数中使用的密钥Key就能以同结构进行反向运算,从而得出明文。

费斯妥函数(F函数):

结构图:

具体分成以下4个步骤:

1. 扩张函数 (E函数):

将32位的半块扩展到48位,其输出包括8个6位的块,每块包含4位对应的输入位,加上两个邻接的块中紧邻的位。

注意输入中的某些位在输出中被用到了不止一次,例如输入的第5位出现在输出的第6和8位。因此,32位的半块输入被扩张到了48位。
2. 异或操作:
用异或操作将扩张的结果和一个子密钥进行混合。
3.S盒:
在与子密钥混合之后,块被分成8个6位的块,然后使用“S盒”,或称“置换盒”进行处理。8个S盒的每一个都使用以查找表方式提供的非线性的变换将它的6个输入位变成4个输出位。S盒提供了DES的核心安全性—如果没有S盒,密码会是线性的,很容易破解。
给定6比特输入,将外面两个比特(第一个和最后一个比特)作为行条件,中间四个比特(inner four bits)作为列条件进行查表,最终获得4比特输出。例如,输入“011011”,通过外面两个比特“01”和中间的比特“1101”进行查表,最终的输出应该是“1001”
4. P置换:
最后,S盒的32个输出位利用固定的置换,“P置换”进行重组。这个设计是为了将每个S盒的4位输出在下一回次的扩张后,使用4个不同的S盒进行处理。

密钥调度:

以上是DES 64bits密钥分成16个回合使用的算法。
1. 选择置换(PC1):
从64位输入密钥中选出56位的密钥—剩下的8位要么直接丢弃,要么作为奇偶校验位。
2. 位移操作(<<<):
56位分成两个28位密钥,两个半密钥都被左移1或2位(由回次数决定)
3.选择置换(PC2):
该置换从56位的密钥调度状态中取出48位的子密钥
解密过程中,除了子密钥输出的顺序相反外,密钥调度的过程与加密完全相同。

整体流程:

另外,在整个16回合Feistel 网络外还要加上两个置换操作,IP和IP^-1。
1. 初始置换(IP):
其意义如下:输出的首位为输入的第58位,第二位为50位,依此类推,输出的最后位为输入的第7位,实际上是一个矢量。
2. 最终置换 (IP-1):
是IP的逆过程,含义与IP的相似。
IP和IP-1在密码意义上作用不大,它们的作用在于打乱原来输入x的ASCII码字划分的关系,并将原来明文的校验位x8, x16,L, x64变成为IP输出的一个字节。

DES 数据加密标准 结构详解相关推荐

  1. angular 标准目录结构_Angular-cli新建项目目录结构详解

    Angular-cli新建项目目录结构详解 在上一篇博客中我们已经通过Angular CLI命令行工具创建出来一个全新的Angular项目,要想写项目,首先我们要先搞清楚项目的目录结构是怎样的,每个文 ...

  2. web标准 浏览器介绍 开发工具介绍 HTML介绍 HTML颜色介绍 规范 HTML结构详解 {前端之前端初识}...

    前端之前端初识 前端初识 本节目录 一 web标准 二 浏览器介绍 三 开发工具介绍 四 HTML介绍 五 HTML颜色介绍 六 规范 七 HTML结构详解 一 web标准 web准备介绍: 1.w3 ...

  3. [java] 虚拟机(JVM)底层结构详解[转]

    [java] 虚拟机(JVM)底层结构详解[转] 本文来自:曹胜欢博客专栏.转载请注明出处:http://blog.csdn.net/csh624366188 在以前的博客里面,我们介绍了在java领 ...

  4. Android4.0源码目录结构详解

    Android4.0源码目录结构详解 Android4.0与2.1目录差不多 alsa这块,注意external/tinyalsa下有: include/tinyalsa/asoundlib.h mi ...

  5. 搞一下 车载以太网实战 | 01 车载以太网帧结构详解

    前言 搞SOA.搞 AP & CP AUTOSAR.搞异构SoC.搞车载以太网.搞车载OS等就找搞一下汽车电子. 全系内容可在<搞一下汽车电子>后台回复 "系列" ...

  6. Android 8.0学习(32)---Android 8.0源码目录结构详解

    Android 8.0源码目录结构详解 android的移植按如下流程:     (1)android linux 内核的普通驱动移植,让内核可以在目标平台上运行起来.     (2)正确挂载文件系统 ...

  7. Android系统目录结构详解

    Android系统基于linux内核.JAVA应用,算是一个小巧精致的系统.虽是开源,但不像Linux一般庞大,娇小可亲,于是国内厂商纷纷开发出自己基于Android的操作系统.在此呼吁各大厂商眼光放 ...

  8. Linux文件系统的目录结构详解(转)

    Linux文件系统的目录结构详解(转) 原文链接https://www.cnblogs.com/cyjaysun/p/4462325.html 一.前 言 文章对Linux下所有目录一一说明,对比较重 ...

  9. HTML-3.1-HTML结构详解

    HTML-3.1-HTML结构详解 一:文档声明头 二:头标签 1.字符集 charset 2.定义"关键字" 3.定义"页面描述" 4.title标签 5.& ...

最新文章

  1. 报名 | 智进未来:AI在医疗健康领域的应用、挑战及发展趋势
  2. 那些巨头公司的前端面试都喜欢问些什么?
  3. .Net Core 环境安装
  4. kafka 运行一段时间报错Too many open files
  5. 算法组合 优化算法_算法交易简化了风险价值和投资组合优化
  6. php无限加载,php递归无限页面加载
  7. php mysql购物车实现原理_PHP实现购物车的思路和源码分析
  8. Nginx详解(正向代理、反向代理、负载均衡原理)
  9. java中cplex程序_Cplex中文教程全 PDF 下载
  10. SQL Server 2005数据库可疑、置疑修复方法
  11. sosoapi 项目之本地搭建
  12. Android Contacts 联系人源码分析
  13. 保护模式下的CPL,RPL,DPL与特权级检查(二)
  14. python print怎么用_Python学习路线分享Beeprint怎么用
  15. 用mysql查找姓王的行为轨迹_mysql查询
  16. 申请ios开发者证书到获取p12文件及profiles文件
  17. java tps 优化_高tps下,java性能调优
  18. 计算机软件统考,计算机统考_计算机与软件_考研论坛(kaoyan.com)
  19. 英语总结-August
  20. 计算机二级C语言公共基础知识,以及习题总结(六)数据模型

热门文章

  1. [转帖]RC、CTP、RTM、OEM、RTL、VOL版本的区别
  2. python2.7升到python3.7的createrepo报错
  3. H.266 JEM相对于HEVC HM的改进
  4. opencv应用程序移植到hi3559板卡
  5. R-quantile()
  6. mybatis黑马:一级缓存和二级缓存
  7. 《大话处理器》连载——微架构(4) 史上最经典的5级流水线
  8. HTML语义化标签一(header、nav、section、article)
  9. c语言实现数组中的数据逆序排列
  10. Rails 地图插件