DES加密

  DES采用了64位的分组长度和56位的密钥长度,是对称加密的一种。

  DES的理论进化主线是 1945年Shannon大神提出的交替使用混淆(使密文与密钥的统计关系变复杂)和扩散(使明文与密文的统计关系变复杂)的乘积密码(DES加密的核心思想)-->1960s的Feistel结构-->DES。实践主线是 1971年基于Feistel结构的LUCIFER算法-->Tuchman-Mayer方案(将LUCIFER的128位密钥简化为56位)-->1977年被采纳的DES(增加S盒,产生非线性)。

  下图为DES加密的整个机制

  

  DES加密操作分两块,明文加密以及生成子密钥两部分。

  上图左半部分描述了明文加密成密文的三个阶段。

  1、64位的明文经初始置换(IP)而重新排列。

  2、进行16轮的置换和转换(基于Feistel结构)。

  3、再做一次置换(IP-1,与初始置换互逆)。

  可逆验证    M=IP-1{F[IP(P)]}     

        IP-1{F[IP(M)]}= IP-1{F[IPIP-1{F[IP(P)]}]}=IP-1{FF[IP(P)]}=IP-1IP(P)=P

  结论,加密和解密的过程基本一致(F函数代表16轮转换的整体效果,实际上子密钥在加密和解密中顺序是相反的)

  上图右半部分是56位密钥的操作过程。

  1、密钥先做一个置换。

  2、再做16次包含循环左移和置换的操作组合,每次都产生一个子密钥Ki。每一轮的置换操作都完全相同,但由于循环左移而使得每个子密钥不同。

  

  下面介绍初始置换及其逆置换

  

  如上表,分别代表初始置换和初始置换的逆置换。表中数字包含1-64,代表输入的64位分组的每一比特在置换输出后的位置。

  很显然,以上两个置换确实是可逆的,如明文分组的第1位经初始置换后出现在第58位,而逆置换的第58位将输出到第1位。

   这个置换的原理实际上是对置换群的可逆操作。

  Feistel结构的加密与解密

  

  Feistel结构的加密算法将明文分组分成等长的左右两部分,这两半经过n轮迭代后组成密文分组。每一轮的迭代操作都完全相同,解密过程本质上与加密过程操作是一致的,只是子密钥的使用顺序与加密过程完全相反。因此,为了研究加密与解密过程的可逆性,可将问题简化为只有一轮的迭代,如下图。

  

  feistel结构的可逆性,其运用的数学原理是异或的几个基本性质

       [AB]C=A[BC]        

    AA=0       

    A0=A

  以 i 轮为例

          

    加密时有                                              解密时有

      Li=Ri-1                    Li’=Ri-1‘   ==>   Li’=Li=Ri-1  

      Ri=Li-1F(Ri-1,Ki)                               Ri’=Li-1F(Ri-1’,Ki)   ==>  Ri’=RiF(Li,Ki)=Li-1F(Ri-1,Ki)F(Ri-1,Ki)=Li-1

    结论:每轮加密和解密的中间结果都完全一样,且与F函数无关。而F函数越复杂,Ri与Li-1的关系越复杂,因而越难被破解。

    

  DES第二阶段每轮变换的详细过程

  

  由于轮密钥长48位,R是32位,首先要将R进行置换扩展为48位,其中有16位是重复的,如用下表进行置换扩展。

  

  然后将扩展后的48位与轮密钥进行异或,所得结果再用一个替代函数作用(S盒)并输出32位。下图解释了S盒在函数F中的作用。

  

  代替函数由8个S盒组成,S盒的变换参见下表。

  

  每个S盒都输入6位,输出4位。盒Si输入的第1位和最后1位组成一个2位的二进制数,用来选择S盒4行代替值中的一行,中间4位用来选择16列中的某一列。行列交叉处的十进制转换为二进制之后可得到输出的4位二进制数。

  S盒实现了非线性的特性。通过S盒,不同的输入可以有相同的输出,进一步增加了明文与密文之间的映射关系的复杂度,使得破解更加艰难。

  最后再做一次置换后输出,该置换例子如下表。

  

  密钥产生

  1、首先输入64位密钥,密钥各位分别标记为1-64。从64位中选择56位作为有效密钥,如选择下表阴影部分。

  

  2、将所得56位有效密钥进行置换并划分成等长的两部分C0和D0,如下表。

  

  3、每轮进行迭代时,Ci-1和Di-1分别循环左移一位或者两位,具体移位数见下表。

  

  4、对移位后的值再做一次置换,如下表。

  

  

转载于:https://www.cnblogs.com/block2016/p/5502544.html

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

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

相关文章

计算机系统基础:输入输出技术知识笔记

1、内存与接口的编址方式 1.1 内存和接口地址独立编址方法 内存地址和接口地址是两个完全独立和相互隔离的地址空间。访问数据的指令也不同,接口只有读写指令,其余都是内存指令。 特点:接口和内存指令容易区分,但接口指令太少、功…

小米max2 android p,这就是小米Max2?6.4英寸超大屏幕配置大升级

标签:小米手机(3463)小米(3233)虽说今年上半年小米6的重磅机型会是小米6,但随着小米Max在官方商城的下架,这款巨屏手机的更新换代产品已经在网络上浮出水面。根据知名图形测试网站GFXBench最新公布的信息显示,一款代号为Oxygen的小…

winform直接控制云台_速学指南,2分钟学会Feiyu pocket口袋云台的隐藏功能操作

上周三,Feiyu pocket口袋云台相机正式发布,重量仅115g,单手可持,可拍摄 4K/60fps高清画面;6轴混合防抖技术加持,赋予轨迹延时、全域模式、慢动作、全跟随等模式更专业、高效的拍摄体验。Feiyu pocket口袋云…

ThreadPoolTaskExecutor和ThreadPoolExecutor区别

初学者很容易看错,如果没有看到spring或者JUC源码的人肯定是不太了解的。 ThreadPoolTaskExecutor是spring core包中的,而ThreadPoolExecutor是JDK中的JUC。ThreadPoolTaskExecutor是对ThreadPoolExecutor进行了封装处理。 ThreadPoolExecutor ThreadP…

电脑技巧:如何解决大部分的电脑防弹窗广告

相信很多人都有这种情况,打开电脑,电脑上全部各种广告弹窗,或者在办公、追剧的时候,电脑突然就弹出了一条,是不是很烦人,这几招不用借助软件,就能解决弹窗的方法不防一试。 方法一: 第一种方法,可以对付部分…

hades武器第四形态解锁_凯多的第四个技能预告——冰冻!

在《海贼王》中,四皇凯多被誉为“海陆空最强生物”,能够变成神龙,如果不出意外的话,凯多应该是动物系幻兽种神龙果实的能力者。毕竟凯多的海贼团就叫做“百兽海贼团”,手下也都是动物系果实能力者,能够降服…

解决git@github.com: Permission denied (publickey). fatal: Could not read from remote repository. Pleas

今天用idea提交代码到github上,push后报错 gitgithub.com: Permission denied (publickey). fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists. 一:原因分析 Permission denied (publickey) 没…

转载------------java equals 方法

作者:海子出处:http://www.cnblogs.com/dolphin0520/浅谈Java中的equals和 在初学Java时,可能会经常碰到下面的代码: 1 String str1 new String("hello"); 2 String str2 new String("hello"); 3 …

计算机系统基础:校验码知识笔记

1、校验码概念 校验码主要是为了解决计算机各部件进行数据传输和交换,确保传送过程的正确无误,一是为了提高硬件电路的可靠性,二是提高代码的校验能力。通常会用校验码来检查传送的数据是否正确。 校验码编码分为两类:合法编码、错…

qml与HTML数据交互,GitHub - toby20130333/QtQuickHtmlBridge: 基于QtQuick的C++,qml,Html三者的Bridge交互...

基于QtQuick的C,qml,Html三者的Bridge交互主要功能自定义C对象并注册到QML可以在QML中继续扩展C对象的属性和方法 信号等将C对象注入到WebChannelHtml中引入C对象JavaScript与C直接交互示例代码说明main.cpp://该实例必须直接继承自Object的 QWidget的忽略qmlRegisterType(&quo…

html为什么要进行表单验证_化学锚栓为什么要进行拉拔试验?

点击箭头处“蓝色字”,关注我们哦!!化学锚栓是继膨胀锚栓之后出现的一种新型紧固材料,由化学药剂与金属杆体组成,是通过特制的化学粘接剂,将螺杆胶结固定于砼基材钻孔中,以实现对固定件锚固的复…

电路基础知识讲解(太全面了)

IT技术分享社区个人博客网站:https://programmerblog.xyz文章推荐程序员效率:画流程图常用的工具程序员效率:整理常用的在线笔记软件远程办公:常用的远程协助软件,你都知道吗?51单片机程序下载、ISP及串口基…

github设置仓库可见性 私人仓库设置

一:点击Setting 二:点击Make private 三:阅读关于将仓库设为私有的警告。 入您要设为私有的仓库的名称,例如 accountname/reponame。 单击 I understand, make this repository private(我已了解,请将此仓库设为私有)

html鼠标悬停区域拉伸,html – :将鼠标悬停在具有边框半径的div上

这里的问题是子元素不继承父元素的border-radius.有两种方法可以实现您想要的:您可以将子元素的border-radius设置为匹配或大于父元素的radius,或者将父元素的overflow属性设置为hidden.这是一个快速的片段,说明了问题和两个解决方案:*{box-sizing:borde…

rfid在高速公路管理中的应用_RFID技术与ETC技术在弱电门禁系统中应用

前言:无线射频识别技术(RFID技术)较早的大规模的综合应用,发展至今,我国的RFID技术已经较为成熟。 相关技术1、无线射频识别 RFID(Radio Frequency Identification,无线射频识别)是一种非接触式的自动识别技术,它通过射…

Idea中Terminal中git基本操作

列出分支 列出分支基本命令:git branch 没有参数时,git branch 会列出你在本地的分支。 上图的意思就是,我们有一个叫做 master 的分支,并且该分支是当前分支(有*星号的)。 当你执行 git init 的时候,默认情况下 Gi…

计算机体系结构知识笔记

计算机体系结构结构:计算机的概念结构、功能和性能特性,它从一个更高的层次对计算机的结构特征等宏观特征进行研究。 1、计算机体系结构分类 2、CISC和RISC 指令体系结构(ISA):一个处理器支持的指令和指令的字节级编码…

java类的加载机制

一、什么是类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构。类的加载的最终产品是位于堆区中的Class对象&…

razor 写入html标记,如何在Razor中编写“ Html.BeginForm”

泛舟湖上清波郎朗以下代码可以正常工作:using (Html.BeginForm("Upload", "Upload", FormMethod.Post, new { enctype "multipart/form-data" })){ Html.ValidationSummary(true) …

windows安全模式_Winclone 8 for Mac(Windows分区备份迁移和还原工具)

winclone 8 Mac版是一款专业的boot Camp迁移助手,能够将你的PC移动到你的Mac中,让你实现win系统的迁移。winclone Mac版可以将Bootcamp分区安装的windows进行克隆也可将克隆文件传回Bootcamp分区。并且操作简单。你只需要通过几次点击,就能快…