DES分组加密算法 - Go语言中文社区

DES分组加密算法


一:分组加密算法

1.1.概念

     分组密码是将明文数字序列按照固定长度分组,并且用同一个密钥和同一个加密算法逐组加密,从而将各个明文分组变换成为密文分组的密码。

1.2.安全原则

(1)混乱原则:使得密文和对应明文和密钥之间的关系足够复杂,以至于密码分析者无法利用这种关系。

(2)扩散原则:使得每一个明文bit和密钥bit影响尽可能多的密文bit,用来隐藏明文的统计特性和结构规律。

二:DES设计背景(百度百科)

     DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法,1977年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),并授权在非密级政府通信中使用,随后该算法在国际上广泛流传开来。

三:DES算法特点总结

  • DES为对称加密算法,使用同一个密钥来加密与解密
  • 要求手法双方在加密和解密前约定密钥
  • DES属于分组加密算法,该算法每次处理固定长度的数据段,称之为分组,其长度为分组长度
  • DES分组大小为64bit,若加密数据长度不足64bit ,可以按照某种具体的规则填充
  • DES采用56位密钥加密64位的明文数据块
  • 当n个64bit数据块都经过DES加密后,所得的n个64bit密文快,串在一起就是密文输出

四:DES加密算法一般结构图

备注:DES加密算法大致包含初始(终止)置换+扩展置换+S盒压缩三个部分,下面将从详细讲解这三个部分。

4.1 初始置换和终止置换

先看看一下初始置换过程图

首先看一下初始置换表(8*8  64bit),第一位是58,,58表示输入的第58位换到第一位,第二位是50,50表示输入的第50位换到第二位,以此类推。原始数据经过初始置换表的置换,就会得到置换后的表格。

终止置换和初始置换是互逆的过程,即经过一次初始置换和一次终止置换,64位的二进制数据会别还原。

下面我们来做个例题巩固一下:

题目:当输入一个十六进制数,写出其终止置换输出

0x 0000 0080 0000 0002(十六进制)

解答:

先将输入的十六进制转化为二进制数及终止置换表如下图所示

我们可以看到,输入表中第25位和第63位是1,其余为0,所以重点考虑这两个位置即可,看终止置换表 第一个数字40表示,输入的第40个二进制数换在第一个位置,同理,第15个数字是63表示输入的第63个二进制数换在第15个位置,第64个位置是25,表示第25个输入的二进制数换在第64个位置。则可以得到经终止置换表置换后的64位数据为

转化为16进制为  0x 0002 0000 0000 0001 即为终止置换最后输出。

4.2 扩展置换过程(E盒)

经过初始置换的64bit数据分成两个部分,左侧32bit,右侧32bit 。其中一边32bit扩展为48bit数据,其实就是在某些位置添位操作。

同初始(终止)置换表一样,扩展置换也有一个扩展置换表,首先看一下扩展置换表

我们假设原始数据就是上面1101 0001 0011 0100 0010 0011 0011 1011的32bit数据,我们需要将其分为8组,每一组有4个元素,我们扩展就是将4个元素组扩展成为6个元素组,这样就完成了32到48位的转换。

经过一下步骤:

  1. 旧组的第一位复制到前一个新组的最后一位
  2. 旧组的最后一位复制到下一个新组的第一位
  3. 最后复制每个组中间的4个元素到新的表里面

这样就完成了从32bit到48bit的扩展置换过程。

4.3 S盒压缩处理

(1)经过扩展的48bit明文和48位密钥进行异或运算

(2)再使用8个S盒压缩处理得到32位数据,实际上将48个输入分成了8块,每一块都有6位,我们需要将这6位压缩成4位即可,在具体的处理过程中使用的是8张4行16列的表来进行压缩

例如:假设48位数据输入,分成8组,每组有6位

111111  100101  110011  001100  011001  010111  111011  011000

以第一组为例子 111111

原始数据:111111

  1. 取头尾两个数据组成一个组得到一个新的二进制数 11 ,转化为十进制  3  ,即为行数
  2. 取中间4个数据组成一个组得到一个新的二进制数 1111 ,转化为十进制 15 ,即为列数
  3. 查表   第 3行第15列查找得到  13
  4. 再把该S盒压缩处理压缩数转换为二进制输出   13--->1101

以上过程完成了从6位数据转化为4位数据的压缩,其他各组方法一致。

4.4 P盒置换

P盒置换是对S盒置换后的32bit数据的位置进行移动。

原理同初始置换,经过这个P盒置换之后,就会得到一轮运算中的最后输出。

撒花✿✿ヽ(°▽°)ノ✿!!!

 

 

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/Suyebiubiu/article/details/88615965
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-06-06 09:40:30
  • 阅读 ( 1896 )
  • 分类:算法

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢