码迷,mamicode.com
首页 > 编程语言 > 详细

理解DES算法

时间:2020-05-30 09:11:42      阅读:94      评论:0      收藏:0      [点我收藏+]

标签:相同   alt   解密   生成   算法   利用   进制   左移   压缩   

首先 了解对称密码加密技术:采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。但是有时候密钥不用完全相同 只要相似也可以。因为用一个密钥可以推导出另一个。


传统密钥算法有:DES,IDEA,TDEA,RC5等

同时 DES还是分组加密。对称加密分为分组加密和序列密码。

分组密码,也叫块加密(block cyphers),一次加密明文中的一个块。是将明文按一定的位长分组,明文组经过加密运算得到密文组,密文组经过解密运算(加密运算的逆运算),还原成明文组。
序列密码,也叫流加密(stream cyphers),一次加密明文中的一个位。是指利用少量的密钥(制乱元素)通过某种复杂的运算(密码算法)产生大量的伪随机位流,用于对明文位流的加密。
解密是指用同样的密钥和密码算法及与加密相同的伪随机位流,用以还原明文位流。

下面来了解DES:

技术图片

 

 

 

 

技术图片

 

 

 DES算法的主要过程:

技术图片

 

 

 

 那么首先 我们来看一下初始置换

这一部分 我们将密文按照固定的矩阵 进行位序的移动 这部分与密钥毫无关系

技术图片

 

 

 如上图 原本64位的58位 移动到了第一行第一列 原本的50位 移动到了一行二列

这一部分很明显是可逆的

之后我们把对来看一下密钥的操作

技术图片

 

 

 我们先去掉8个校验位(但是原本的序号肯定是不变的,从图中可以看出是去掉每个字节第八位)

技术图片

 

 

然后再将56位换成两个28位

 

 技术图片

 

 

之后 这里的左移是二进制位运算的左移嗷

 

 一共16轮          16轮不就生成了16个密钥嘛

两个28位左移比单纯56位左移 复杂性更高

技术图片

 

 

 之后

 

技术图片

 

 

此时56位成为了48位 很多位数又没了

总的过程:

技术图片

 

 

前边的这些操作都是移位 置换 没经过什么运算

现在乘机变换要真正进行加密了

 

技术图片

技术图片

 

 

技术图片

 

 

 经过扩展变换之后其实还有很多变换

技术图片

乘积变换有点复杂 上边的可能看的有点晕 我就先大体说一下 我们首先是把初始置换(IP)的明文分成两部分 L0和R0

之后我们进行:

Li = Ri-1 

Ri = Li-1 异或 f(Ri-1,Ki)

一共16次迭代变换 对应1<=n<=16 这里的f()函数 其中就包含了Rn-1先扩展变换(E盒变换)为48位 后与子密钥Ki异或运算 之后经过s盒压缩变换为32位 然后经过p盒32位的置换

这样应该就能懂了

 

那么现在讲讲扩展变换:

技术图片

 

 

 

 其实也就是变成了

技术图片

 

 扩展变换的结果与Ki进行二进制异或运算

 

得到的结果再经过s盒变换

技术图片

 

 技术图片

 

 大概的规则就是这个

技术图片

 

 我们举个例子 就能看懂了

技术图片

 

 技术图片

 

 之后就要经过P盒置换 从32位线性变换为32位 这就很简单了

技术图片

 

 这时候     f(Ri-1,Ki)的结果已经出来了 我们只需要把它和Li-1异或 就得到了Ri

经过16次运算 得到了L16和R16

 

好了 这时候我们再将L16和R16两部分 颠倒 合并为新的64位

也就是 新的64位 是R16和L16  这个能懂吧

 

然后对其执行一个最终的变换 IP-1 了

 

 

技术图片

 

 其实是IP的逆矩阵哦  要用到线性代数的知识

然后我们就得到了 明文M的加密形式C

 

 

现在再来讲讲解密 因为是对称密码 所以解密就简单多了 就是一个逆过程罢了

我们加密时16轮的迭代子密钥顺序是k1到k16

我们解密是从k16到k1

同时 产生子密钥的循环移位 是右移

之后我们就总结一下DES加密的数学模型吧:

技术图片

 

 解密的数学模型:

技术图片

 

理解DES算法

标签:相同   alt   解密   生成   算法   利用   进制   左移   压缩   

原文地址:https://www.cnblogs.com/ranzhong/p/12986872.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!