我是IT修真院的散修学员,正在学习java任务五,下面是我对DES加密的总结
加密解密过程
DES算法的入口参数有三个:Key、Data、Mode。其中Key为8个字节共64位,是DES算法的工作密钥;Data也为8个字节64位,是要被加密或被解密的数据;Mode为DES的工作方式,有两种:加密或解密。DES算法是这样工作的:
如Mode为加密,则用Key去把数据Data进行加密,生成Data的密码形式(64位)作为DES的输出结果;
如Mode为解密,则用Key去把密码形式的数据Data解密,还原为Data的明码形式(64位)作为DES的输出结果。
总体过程
明文64位->初始置换IP->16轮加密变换->逆初始置换IP-1->密文。
子密钥生成
1. PC-1为选择置换,可以去掉奇偶校验位。经过PC-1,把输入的64位密钥转换成56位。并把将这56位分成两块C0(28位)和D0(28位);
2. LSi是表示对Ci-1和Di-1进行循环左移变换,其中LS1,LS2,LS9,LS16是循环左移1位,其余为2位。
3. C1和D1在次经过循环左移变换,生成C2和D2,然后C2和D2合并,通过选择置换PC-2生成密钥K2(48位);PC-2也是选择置换,它是用于从Ci和Di中选取48位作为密钥Ki。
加密函数原理
1. E是把32比特(即上面所提到的64比特分为俩个32比特。)的输入扩展为48比特。
2. 将E置换后的结果与48位的Ki异或,结果当然依然是48位
3. 把异或48位结果平均分为8组B1,B2…B8,每组就是6比特。每组Bi用Si盒处理。s盒处理结束后,进去的是48位,出来的是32位。具体过程如下
a. Si盒共16行4列,注意行号是0-15,列号是0-3
b. Bi组共6bit
i. 取出第一和第六bit共2bit ,把它转换成十进制,表示范围就是0-3
ii. 取出第二到五bit共4bit ,把它转换成十进制,表示范围就是0-15
c. 把Bi中取得的两个数字分别作为行号和列号,去Bi对应的Si的对应行和列读取数值。读到的数值是十进制0-15范围内的数字,把这个数字转换成二进制就是4bit范围内的数值
d. 这样共8个B ,也就最终从8个对应的S盒中共取出8X4bit=32bit的内容。总结一下就是传进来的是48bit ,经过S盒处理后出来的就是32bit
4. P为32位置换函数,把S盒处理结果的32位输入进去,得到32位的处理结果。
这样最终从输入32位,经过内部一系列操作,又输出了32位。
实际应用思路
在通信网络的两端,双方约定一致的Key,在通信的源点用Key对核心数据进行DES加密,然后以密码形式在公共通信网(如电话网)中传输到通信网络的终点,数据到达目的地后,用同样的Key对密码数据进行解密,便再现了明码形式的核心数据。这样,便保证了核心数据(如PIN、MAC等)在公共通信网中传输的安全性和可靠性。
通过定期在通信网络的源端和目的端同时改用新的Key,便能更进一步提高数据的保密性,这正是现在金融交易网络的流行做法。
关于IT修真院
欢迎到IT修真院学习IT技术,成千上万的师兄在这里找到了自己的学习路线,学习透明化,成长可见化,师兄一对一可见指导。快来与我一起学习吧http://www.jnshu.com,我真的获益良多!
还有,那啥,虽然跟修真院老大未曾谋面,但他既然把夸他很帅列在了修真任务中,而我一路学习下来感觉其他任务都非常靠谱,那这个任务的质量肯定也不差,所以老大很帅!