首页 > 其他分享 >密码学——DES加密

密码学——DES加密

时间:2023-03-16 23:23:11浏览次数:39  
标签:加密 48 16 DES 明文 分组 密钥 密码学

DES加密算法

首先,我们讲一下分组密码,顾名思义就是将明文消息分成组来进行加密,也就是说,加密器每次只能处理特定长度的一组数据,这里的"一组数据"就被称之为分组。我们也将每一个分组的比特数就称为分组长度。

我们设想一下,现在有一篇论文想要加密,我们将自己代入分组密码那个时代,计算机算力还不强,很多时候需要人工计算的时候,当我想加密一篇论文,有一种相当稳妥的做法,用毫无规律的密钥对明文进行为加密(实际上就是乱,越混乱越不会被看出来,解密凯撒的一种做法是统计字符数量进行猜测,这也是乱可以解决的),假设这个论文有十万个字,那我可以用十万个毫无规律随机的字母进行凯撒加密,实际效果应该相当好,但加密解密都挺麻烦特别是解密(当然我们不考虑运输密文和密钥会产生的情况),于是又为了简化这样恶心人的解密,同时又不失去混乱的特性,有了分组密码(当然,主要也是那时候加密机还不是电脑,造出来就不好修改了,又不好造太长了),分组密码实际上就是分成等长度的很多组,每个组加密的方式形式都一样。

下面我们讨论再des中一组密码(64bit)的加密

(1)初始置换IP(Initial Permutation)

    

 

 ip表有8*8=64

当输入明文X后,利用IP置换对明文进行换位处理,得到64bit密文组。我们设其为X'

对X'分成左右两个部分,即分别为32+32或者如表为4*8+4*8(即前四行+后四行)

左边记为L0,右边记为R0

(2)生成子密钥

我们在输入明文时还要输入密钥,长度也为64bit(一切都是为了足够的混乱,64bit中用32bit也会存在规律)

PC_1表置换

 

 PC_1置换实际上是为了去掉密钥K的8的奇偶校验码,并对剩下的56位进行打乱,实际上我们可以分两步进行。

奇偶校验码每八位在第八位上,也就是8,16,24,32,40,48,56,64位

可以发现在PC_1置换中没有这些位置的数字。

最后我们可以得到56位K'

同样,我们将其分为C0和D0,每个是28bit

PS:删除奇偶校验码的原因:我也不确定是否是这个原因,但至少有一点可能吧,明文是不重复的,要进行分组,但是密钥是针对每一组都一样的,奇偶校验码的存在会让密钥”规律“,我们为了安全,不能让密钥存在一丁点规律。(拙见,不必在意)

创建16个Cn和Dn

对于C0和D0进行移位,

 

 进行移位后得到C1到C16,,D1到D16

得到子密钥16个K

16个k分别作用在16个转轮机上,

 

 

先有Kn=PC_2(CnDn),CnDn代表着将Dn排在Cn后,即简单的字符串相加(56bit)

PC_2只有8*6=48,也就是有8个位置会没有被选上。不过密钥没有选上倒也无所谓,对信息没有损耗

n有1~16,则有16个K

即16个转轮机

(3)轮函数

转轮机就不介绍了

我们着重谈一下F函数

F函数

1.扩展置换(E盒)

 

 我们有一个E盒,最开始我们将明文分为L0和R0,接下来就需要使用了

R进入E盒,进行扩展,由32位转为48位

可以发现E盒的中间8*4部分是顺序的,左右各多出来两列,这两列是与相邻的格子里的数字有顺序关系,

2.密钥加

E扩展输出的48位数据与48位子密钥进行逐位异或运算,输出48bit

3.代换盒(S盒)

s盒有8个,里面的数字没有规律,每个盒有4*16个数字,对其进行的是查表运算

48bit分为6*8

每六个数字进入一个盒子中

其中第1,6个数字组成一个二进制两位数,可以作为十进制的0~3共四个数,查行数

其中第2,3,4,5个数字组成二进制四位数,可以作为十进制的0~15的某个数,用来查列数

可以查到八个数

这八个数可以分别转为二进制,一个数是4bit,则有4*8=32,相比原来的48位,又进行了压缩

 

 

4.置换运算(P盒)

 

 以上4个运算,每次都要运算,一共计算16次

 

(4)逆初始置换

 

标签:加密,48,16,DES,明文,分组,密钥,密码学
From: https://www.cnblogs.com/nish1hundun/p/17224628.html

相关文章