DES加密算法详解
DES加密
DES加密算法要经过16轮加密,本次例题只计算第一轮加密过程。
1、初始置换
在得到一个16位16进制数(64位2进制数,若是16位16进制数将其转换为64位2进制数)的明文。根据初始置换表进行置换得到一个新的64位2进制数,将其分为两部分前32位是L0,后32位是R0。
2、扩展R0
需要将32位的R0扩展至48位,方便与秘钥进行异或运算。32位R0分为8组,一组4位,
扩展方法:将8组按照阶梯式摆放,上下不存在重复,如下图所示
将第一组的最后一位写一个在第二组第一位的前面,将第二组的第一位写一个在第一组的最后。扩展结果如下图
第一组的最前面的0是最后一组的最后一位。最后一组的最后一位是第一组的第一位。
3、秘钥
1.1 初始秘钥
最初得到一个64位2进制的秘钥,经过秘钥置换表1,压缩置换之后会得到56位的子密钥K0。
1.2 秘钥偏移
将56位的K0分为两部分,第一部分28位是C0,第二部分28位是D0,经过循环左移表进行左移,然后拼接C0D0,得到新的K0,
1.3 再次置换
将新的K0根据秘钥置换表2,进行再次压缩置换,得到48位的K1,即本轮加密所用子密钥。
4、异或运算
将上述得到R0与得到子密钥K1,进行异或运算得到48位2进制的新数据R0。
5、 S盒替换
将新数据R0根据S盒替换表,进行替换,会得到32位的2进制数据。
替换方法:将48位数据分为一组6位,总共8组,分别对应8个S盒。一组中6位2进制数据,第一位和最后一位会得到所在行数,中间4位转换为10进制数,即所在列数,得到所在行数、列数,对照相应的S盒替换表,即可得到一个十进制数,再讲其10进制数转为4位2进制数。8组替换结束就可以得到32位的数据,
6、 P盒替换
将经过S盒替换得到的32位数据根据P盒进行再次置换排列,得到新的32位数据
7、 赋值
将经过P盒置换得到32位数据与最初前32位数据L0进行异或运算,得到的就是R1,将最初分片得到R0赋值给L1。第一轮密文就是(R1L1),在对其进行15轮加密计算。
8、逆置换
将经过16轮加密计算得到密文,经过逆初始置换表置换,得到最后的密文。
DES加密案例
题目:0X0123456789ABCDEF,转换为2进制即为 00000001 00100011 01000101 01100111 10001001 10101011 11001101 11101111
秘钥:0X133457799BBCDFF1,转换为2进制数即为?00010011 00110100 01010111 01111001 10011011 10111100 11011111 11110001
1、初始置换
根据表进行第一次置换,得M
M=11001100 00000000 11001100 11111111 11110000 10101010 11110000 10101010
分为两部分L0、R0。得
L0=11001100 00000000 11001100 11111111
R0=11110000 10101010 11110000 10101010
2、扩展R0
将第一组的最后一位写一个在第二组第一位的前面,将第二组的第一位写一个在第一组的最后。扩展结果如下图
扩展之后结果为
E(R0)48=01111010 00010101 01010101 01111010 00010101 01010101
3、秘钥
1.1 初始秘钥
00010011 00110100 01010111 01111001 10011011 10111100 11011111 11110001
根据交换规则表进行压缩置换得
56位二进制数
K0=11110000110011001010101011111111000011001100101010101111
1.2 秘钥偏移
将56位的K0分为两部分,第一部分28位是C0,第二部分28位是D0,
C0= 11110000 11001100 10101010 1111
D0= 01010101 01100110 01111000 1111
经过循环左移表进行左移,得到
C1=1110000 11001100 10101010 11111
D1=1010101 01100110 01111000 11110
然后拼接C0D0,得到新的C1D1
C1D1=11100001100110010101010111111010101011001100111100011110
1.3 再次置换
压缩置换之后得到48位的K1
K1(48)= 00011011 00000010 11101111 11111100 01110000 01110010
4、异或运算
将上述得到R0与得到子密钥K1,进行异或运算得到48位2进制的新数据R0。
E(R0)48=01111010 00010101 01010101 01111010 00010101 01010101
K1(48)= 00011011 00000010 11101111 11111100 01110000 01110010
异或之后得到
R0(48)=01100001 00010111 10111010 10000110 01100101 00100111
5、 S盒替换
对得到R0进行分组
011000
010001
011110
111010
100001
100110
010100
100111
然后根据S盒表进行替换
得到32位的数据
Ms(32)=01011100100000101011010110010111
6、 P盒替换
将经过S盒替换得到的32位数据根据P盒进行再次置换排列,得到新的32位数据
F=?00100011 01001010 10101001 10111011
7、 赋值
R1=L0异或F=11101111 01001010 01100101 01000100
L1=R0=11110000 10101010 11110000 10101010
拼接得到密文
M1=11101111 01001010 01100101 01000100 ?11110000 10101010 11110000 10101010
即
M1=(EF4A6544F0AAF0AA)16
若有问题欢迎评论、私信提出!!!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!