DES加密算法是一种分组加密算法,明文以64位为单位被分割成块。在64位密钥的控制下,64位数据首先进行初始变换,然后经过16轮加密迭代。每轮迭代中,64位数据被分割为左右两半,每半32位。右半部分与密钥结合,再与左半部分结合,结果作为新的右半部分;结合前的右半部分作为新的左半部分。这一系列步骤构成一轮,共重复16次。最后一轮之后,再进行初始置换的逆置换,最终得到64位的密文。
DES加密过程主要由加密处理、加密变换和子密钥生成三个部分组成。加密处理首先对64位明文进行初始变换,通过表1所示的初始换位表IP,将输入位置换到新的位置。接着,经过16轮加密变换,初始换位的64位输出作为下一次的输入,将64位分为左、右两个32位,分别记为L0和R0。从L0、R0到L16、R16,每轮处理后的左右32位分别为Ln和Rn,其中Rn=Ln-1,Ln=Rn-1,kn是第n轮输入的48位子密钥。最后,进行16轮加密变换后,L16和R16合并为64位数据,再按照表2所示的最后换位表进行IP-1的换位,得到64位密文。
加密变换过程中,通过重复某些位将32位的右半部分扩展为48位,56位的密钥先移位并减少至48位,48位的右半部分通过异或操作与48位的密钥结合,分成6位的8个分组,通过8个S-盒将这48位替代成新的32位数据,再进行置换。S-盒输入6位,输出4位,通过输入的6位的开头和末尾两位选定行,然后按选定的替代表将中间4位进行替代,输出32位,再按照表4单纯换位表P进行变换,完成f(R,K)的变换。
子密钥生成过程从64位密钥开始,通过压缩换位PC-1去掉每个字节的第8位,密钥去掉第8、16、24、……64位减至56位,实际密钥长度为56位。每轮生成48位子密钥,输入的64位密钥先通过压缩换位得到56位密钥,每层分成两部分,上部分28位为C0,下部分为D0。C0和D0依次进行循环左移操作生成C1和D1,将C1和D1合成56位,再通过压缩换位PC-2输出48位子密钥K1。循环左移次数如表7所示,以此类推,得到16个子密钥。密钥压缩换位表如表6所示。
2. DES加密过程和解密过程的区别
数据加密标准DES(Data Encryption Standard)算法是一个分组加密算法,也是一个对称算法,加密和解密使用同一个算法,利用传统的换位、异或、置换等加密方法。DES是IBM在上个世纪70年代开发的简密钥对称加解密算法。
加密过程和解密过程的区别:“方向和过程刚好相反”。也就是说“解密过程是加密过程的反过程”,DES算法解密过程是加密过程的“逆”运算。
以Triple DES为例说明
加密过程:
1、以K1加密
2、以K2解密
3、以K3加密
解密过程(密钥顺序及应用方向与加密过程相反):
1、以K3解密
2、以K2加密
3、以K1解密
说明:K1、K2、K3是密钥。
3. DES算法的核心是什么
S盒是DES算法的核心,用在分组密码算法中,是唯一的非线性结构,其S盒的指标的好坏直接决定了密码算法的好坏。
每个S盒是将6位输入转化为4位输出。
根据6位输入来查找对应S盒的表,由第一和最后一位得到行号,由中间的四位得到列号。如:对S盒1,输入为110011,就是查找第3行、第9列,结果为11,于是输出就是二进制的1011。
(3)des算法例子扩展阅读
DES于1976年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),随后在国际上广泛流传开来。
目前DES现在已经不是一种安全的加密方法,主要因为它使用的56位密钥过短。1999年1月,distributed.net与电子前哨基金会合作,在22小时15分钟内即公开破解了一个DES密钥。在2001年,DES作为一个标准已经被高级加密标准(AES)所取代。
DES是一种分组密码,它使用使用56位秘钥对64位(8字节)分组进行加密。同时是一种对称密码,即其加密和解密使用相同的秘钥。每个分组的加密分为16轮迭代,每轮是用不同的自秘钥,而子秘钥是根据主密钥k编排得出。
4. des加密算法
des加密算法如下:
一、DES加密算法简介
DES(Data Encryption Standard)是目前最为流行的加密算法之一。DES是对称的,也就是说它使用同一个密钥来加密和解密数据。
DES还是一种分组加密算法,该算法每次处理固定长度的数据段,称之为分组。DES分组的大小是64位,如果加密的数据长度不是64位的倍数,可以按照某种具体的规则来填充位。
从本质上来说,DES的安全性依赖于虚假表象,从密码学的术语来讲就是依赖于“混乱和扩散”的原则。混乱的目的是为隐藏任何明文同密文、或者密钥之间的关系,而扩散的目的是使明文中的有效位和密钥一起组成尽可能多的密文。两者结合到一起就使得安全性变得相对较高。
DES算法具体通过对明文进行一系列的排列和替换操作来将其加密。过程的关键就是从给定的初始密钥中得到16个子密钥的函数。要加密一组明文,每个子密钥按照顺序(1-16)以一系列的位操作施加于数据上,每个子密钥一次,一共重复16次。每一次迭代称之为一轮。要对密文进行解密可以采用同样的步骤,只是子密钥是按照逆向的顺序(16-1)对密文进行处理。