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口袋云…

Python中处理DataFrame,R绘图

IN Pythonfrom pandas import DataFrame,Seriesimport pandas as pdimport numpy as npdata pd.read_csv(rC:\Users\lxy\Desktop\工作相关\工作报告KPI\pydata-book-master\ch06\ex5.csv)data.index.namexdata.to_csv(D:\df.csv)IN R> library(ggplot2)> df <- read.…

ThreadPoolTaskExecutor和ThreadPoolExecutor区别

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

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

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

c 跨平台android,Unity 使用C/C++ 跨平台终极解决方式(PC,iOS,Android,以及支持C/C++的平台)...

PC的事实上根本不用说&#xff0c;毕竟C#和C交互的文章已经够多了&#xff0c;当然我自觉得经过几次折腾后。差点儿全部游戏须要到的操作我都掌握了(各种传參方法&#xff0c;各种坑&#xff0c;不懂的能够留言问。尽管基本上没人看。哈哈)废话不多说&#xff0c;我们主要来讲两…

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

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

解决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 方法

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

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

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

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为什么要进行表单验证_化学锚栓为什么要进行拉拔试验?

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

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

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

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

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

Git合并分支操作

1. 添加自己的文件 git add .; 2. 缓存自己的文件 git stash; 3. 查看状态 git status; 4. 获取别的分支 git pull origin master(分支名); 5. 出栈自己的文件 git stash pop 。 转载于:https://www.cnblogs.com/csl0910/p/5605868.html

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

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

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

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

Idea中Terminal中git基本操作

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

计算机体系结构知识笔记

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