DES的编程是一件并不难的事情,但是正像之前说的那样,编完了程序需要去测试,所以这里测试环节就非常关键了,我在编写程序的时候,在网上并没有找到详细的一个编程的数据例子,也就是在程序的关键部分产生的数据的记录和公开,而这对于这种加密算法的正确性的检验和程序错误的排查却是至关重要的,所以这里把一个正确的加密的程序的每一步的关键输出给出,以便于编写者调试。
我们可以将数据分为3部分,第一部分是对初始的明文做出变换后的结果,第二部分是对密钥进行变换后得出的结果,最后一部分就是加密流程中每一步输出的结果直至16轮的最后一轮输出需要的密文,当然,解密的时候和加密过车公除了一部不同,那就是密钥的使用顺序,其他都是一样了,不过这里还是把解密的数据流程也给出,其实关键就在于你能把数据加密过来,然后也必须能够把加密后的密文解密回去,这样的程序基本上就是对的了,关键的关键是,在你无法解密回去的时候,你知道是程序除了问题,但是问题出在哪里?你尽可以自己手工计算,然后进行对照,但是那样的时间较为漫长,所以这里给出正确程序直接输出的数据,也是为了更好的及中噢乖注意力于程序本身。,因为是加密的二进制码,所以给出的例子中的所有数据也都是二进制码,以后的转换是程序编写者自己的事喽。
第一个测试用例:
这个是需要加密的原始数据:
0101110111000101001110011010011001000100101001101001101001100000
这个是输入的密钥:
1011000100110010011100110010010000110101001101100111011100111001
密文变换:
这个是对数据做第一次置换IP后的结果:
1001001101000101001110110000011101101010101011000100010101101000
密钥变换:
这里输出的是产生的16个字密钥
010100000010110010111110000101110010101011000010
010100001110111011100100010100000010001101000111
110100001111110100100110111101101000000010001100
111000001010011101100111010000000011011111001011
111000011101011000100111001111101011000000101001
111000011001001111110010011000100101110101100010
101101001101001011110011000011001010100100111010
101101110101001101010010111001010101110001010000
001001100111101101011011110010111001101001000000
001011110111010101010001110100001100011100111000
010011110100110111011001000110010001111000001100
010111111110000110011001110110000111000010110000
000111111000110110001011001000010110101000101101
011110110010100010001111101100100011100010010010
001110011010110010001100101001010000001100110111
110100010011110011001100101001110100001110000000
加密流程:
这个是加密流程中开始时的左右两个的结果:
这个是左边的结果:
10010011010001010011101100000111
这个是右边的结果:
01101010101011000100010101101000
1.
这个是选择运算的结果:
001101010101010101011000001000001010101101010000
这个是异或运算的结果:
011001010111100111100110001101111000000110010010
这里是S盒变换的结果:
100110100000000011010001111010011001001101000101
这是对S盒变换内容做P置换以后的内容:
01101001100111000010110000000011
这个是加密函数中第1轮的左右两个的结果:
这个是左边的结果:
01101010101011000100010101101000
这个是右边的结果:
11111010110110010001011100000100
2.
这个是选择运算的结果:
011111110101011011110010100010101110100000001001
这个是异或运算的结果:
001011111011100000010110110110101100101101001110
这里是S盒变换的结果:
001001011101010101011100101000011001001101000101
这是对S盒变换内容做P置换以后的内容:
10110100000001010101111100011001
这个是加密函数中第2轮的左右两个的结果:
这个是左边的结果:
11111010110110010001011100000100
这个是右边的结果:
11011110101010010001101001110001
3.
这个是选择运算的结果:
111011111101010101010010100011110100001110100011
这个是异或运算的结果:
001111110010100001110100011110011100001100101111
这里是S盒变换的结果:
000110000001001110010101100011011001001101000101
这是对S盒变换内容做P置换以后的内容:
10101101010010000010100000101011
这个是加密函数中第3轮的左右两个的结果:
这个是左边的结果:
11011110101010010001101001110001
这个是右边的结果:
01010111100100010011111100101111
4.
这个是选择运算的结果:
101010101111110010100010100111111110100101011110
这个是异或运算的结果:
010010100101101111000101110111111101111010010101
这里是S盒变换的结果:
101010100111101110011000010101101001001101000101
这是对S盒变换内容做P置换以后的内容:
11110111110110110000001001100100
这个是加密函数中第4轮的左右两个的结果:
这个是左边的结果:
01010111100100010011111100101111
这个是右边的结果:
00101001011100100001100000010101
5.
这个是选择运算的结果:
100101010010101110100100000011110000000010101010
这个是异或运算的结果:
011101001111110110000011001100011011000010000011
这里是S盒变换的结果:
001111101100100010111011101111111001001101000101
这是对S盒变换内容做P置换以后的内容:
01111011001010110010111111110011
这个是加密函数中第5轮的左右两个的结果:
这个是左边的结果:
00101001011100100001100000010101
这个是右边的结果:
00101100101110100001000011011100
6.
这个是选择运算的结果:
000101011001010111110100000010100001011011111000
这个是异或运算的结果:
111101000000011000000110011010000100101110011010
这里是S盒变换的结果:
011011111011001100001010111000001001001101000101
这是对S盒变换内容做P置换以后的内容:
11010100011110001100011100010101
这个是加密函数中第6轮的左右两个的结果:
这个是左边的结果:
00101100101110100001000011011100
这个是右边的结果:
11111101000010101101111100000000
7.
这个是选择运算的结果:
011111111010100001010101011011111110100000000001
这个是异或运算的结果:
110010110111101010100110011000110100000100111011
这里是S盒变换的结果:
110011001111000011010100001001011001001101000101
这是对S盒变换内容做P置换以后的内容:
00100101100011011000110100111100
这个是加密函数中第7轮的左右两个的结果:
这个是左边的结果:
11111101000010101101111100000000
这个是右边的结果:
00001001001101111001110111100000
8.
这个是选择运算的结果:
000001010010100110101111110011111011111100000000
这个是异或运算的结果:
101100100111101011111101001010101110001101010000
这里是S盒变换的结果:
001000011001001010100011000110101001001101000101
这是对S盒变换内容做P置换以后的内容:
00001111011000100110001110000000
这个是加密函数中第8轮的左右两个的结果:
这个是左边的结果:
00001001001101111001110111100000
这个是右边的结果:
11110010011010001011110010000000
9.
这个是选择运算的结果:
011110100100001101010001010111111001010000000001
这个是异或运算的结果:
010111000011100000001010100101000000111001000001
这里是S盒变换的结果:
101111011101011011001100111000011001001101000101
这是对S盒变换内容做P置换以后的内容:
00010101110111010101111100011011
这个是加密函数中第9轮的左右两个的结果:
这个是左边的结果:
11110010011010001011110010000000
这个是右边的结果:
00011100111010101100001011111011
10.
这个是选择运算的结果:
100011111001011101010101011000000101011111110110
这个是异或运算的结果:
101000001110001000000100101100001001000011001110
这里是S盒变换的结果:
110101000110111001110111000000011001001101000101
这是对S盒变换内容做P置换以后的内容:
00100000111001011011100011011110
这个是加密函数中第10轮的左右两个的结果:
这个是左边的结果:
00011100111010101100001011111011
这个是右边的结果:
11010010100011010000010001011110
11.
这个是选择运算的结果:
011010100101010001011010100000001000001011111101
这个是异或运算的结果:
001001010001100110000011100110011001110011110001
这里是S盒变换的结果:
111011001001100010110000010111111001001101000101
这是对S盒变换内容做P置换以后的内容:
00101111100110101000101111110000
这个是加密函数中第11轮的左右两个的结果:
这个是左边的结果:
11010010100011010000010001011110
这个是右边的结果:
00110011011100000100100100001011
12.
这个是选择运算的结果:
100110100110101110100000001001010010100001010110
这个是异或运算的结果:
110001011000101000111001111111010101100011100110
这里是S盒变换的结果:
010111001000110000111101101100011001001101000101
这是对S盒变换内容做P置换以后的内容:
00110010000010001011110111011011
这个是加密函数中第12轮的左右两个的结果:
这个是左边的结果:
00110011011100000100100100001011
这个是右边的结果:
11100000100001011011100110000101
13.
这个是选择运算的结果:
111100000001010000001011110111110011110000001011
这个是异或运算的结果:
111011111001100110000000111111100101011000100110
这里是S盒变换的结果:
000000001001011100110010010100011001001101000101
这是对S盒变换内容做P置换以后的内容:
10100110011100000001100110000000
这个是加密函数中第13轮的左右两个的结果:
这个是左边的结果:
11100000100001011011100110000101
这个是右边的结果:
10010101000000000101000010001011
14.
这个是选择运算的结果:
110010101010100000000000001010100001010001010111
这个是异或运算的结果:
101100011000000010001111100110000010110011000101
这里是S盒变换的结果:
001011000000001110110001010111011001001101000101
这是对S盒变换内容做P置换以后的内容:
10101011010110000010101010110000
这个是加密函数中第14轮的左右两个的结果:
这个是左边的结果:
10010101000000000101000010001011
这个是右边的结果:
01001011110111011001001100110101
15.
这个是选择运算的结果:
101001010111111011111011110010100110100110101010
这个是异或运算的结果:
100111001101001001110111011011110110101010011101
这里是S盒变换的结果:
001010000011101110011010001110011001001101000101
这是对S盒变换内容做P置换以后的内容:
10111111011010000000111001000100
这个是加密函数中第15轮的左右两个的结果:
这个是左边的结果:
01001011110111011001001100110101
这个是右边的结果:
00101010011010000101111011001111
16.
这个是选择运算的结果:
100101010100001101010000001011111101011001011110
这个是异或运算的结果:
010001000111111110011100100010001001010111011110
这里是S盒变换的结果:
101001110111010000100111110001111001001101000101
这是对S盒变换内容做P置换以后的内容:
01000100101100110111101010111101
这个是加密函数中第16轮的左右两个的结果:
这个是左边的结果:
00001111011011101110100110001000
这个是右边的结果:
00101010011010000101111011001111
这样以后最终得到的加密的结果:
0100011011011010010110101111111100001000101101000011111000000111
解密部分
这个是输入的需要解密的原始数据:
0100011011011010010110101111111100001000101101000011111000000111
这个是输入的密钥:
1011000100110010011100110010010000110101001101100111011100111001
明文变换:
这个是对数据做第一次置换IP后的结果:
0000111101101110111010011000100000101010011010000101111011001111
密钥变换:
这里输出的是产生的16个字密钥
010100000010110010111110000101110010101011000010
010100001110111011100100010100000010001101000111
110100001111110100100110111101101000000010001100
111000001010011101100111010000000011011111001011
111000011101011000100111001111101011000000101001
111000011001001111110010011000100101110101100010
101101001101001011110011000011001010100100111010
101101110101001101010010111001010101110001010000
001001100111101101011011110010111001101001000000
001011110111010101010001110100001100011100111000
010011110100110111011001000110010001111000001100
010111111110000110011001110110000111000010110000
000111111000110110001011001000010110101000101101
011110110010100010001111101100100011100010010010
001110011010110010001100101001010000001100110111
110100010011110011001100101001110100001110000000
这个是解密流程中开始时的左右两个的结果:
这个是左边的结果:
00001111011011101110100110001000
这个是右边的结果:
00101010011010000101111011001111
1.
这个是选择运算的结果:
100101010100001101010000001011111101011001011110
这个是异或运算的结果:
010001000111111110011100100010001001010111011110
这里是S盒变换的结果:
101001110111010000100111110001110000111101101110
这是对S盒变换内容做P置换以后的内容:
01000100101100110111101010111101
这个是解密函数中第1轮的左右两个的结果:
这个是左边的结果:
00101010011010000101111011001111
这个是右边的结果:
01001011110111011001001100110101
2.
这个是选择运算的结果:
101001010111111011111011110010100110100110101010
这个是异或运算的结果:
100111001101001001110111011011110110101010011101
这里是S盒变换的结果:
001010000011101110011010001110010000111101101110
这是对S盒变换内容做P置换以后的内容:
10111111011010000000111001000100
这个是解密函数中第2轮的左右两个的结果:
这个是左边的结果:
01001011110111011001001100110101
这个是右边的结果:
10010101000000000101000010001011
3.
这个是选择运算的结果:
110010101010100000000000001010100001010001010111
这个是异或运算的结果:
101100011000000010001111100110000010110011000101
这里是S盒变换的结果:
001011000000001110110001010111010000111101101110
这是对S盒变换内容做P置换以后的内容:
10101011010110000010101010110000
这个是解密函数中第3轮的左右两个的结果:
这个是左边的结果:
10010101000000000101000010001011
这个是右边的结果:
11100000100001011011100110000101
4.
这个是选择运算的结果:
111100000001010000001011110111110011110000001011
这个是异或运算的结果:
111011111001100110000000111111100101011000100110
这里是S盒变换的结果:
000000001001011100110010010100010000111101101110
这是对S盒变换内容做P置换以后的内容:
10100110011100000001100110000000
这个是解密函数中第4轮的左右两个的结果:
这个是左边的结果:
11100000100001011011100110000101
这个是右边的结果:
00110011011100000100100100001011
5.
这个是选择运算的结果:
100110100110101110100000001001010010100001010110
这个是异或运算的结果:
110001011000101000111001111111010101100011100110
这里是S盒变换的结果:
010111001000110000111101101100010000111101101110
这是对S盒变换内容做P置换以后的内容:
00110010000010001011110111011011
这个是解密函数中第5轮的左右两个的结果:
这个是左边的结果:
00110011011100000100100100001011
这个是右边的结果:
11010010100011010000010001011110
6.
这个是选择运算的结果:
011010100101010001011010100000001000001011111101
这个是异或运算的结果:
001001010001100110000011100110011001110011110001
这里是S盒变换的结果:
111011001001100010110000010111110000111101101110
这是对S盒变换内容做P置换以后的内容:
00101111100110101000101111110000
这个是解密函数中第6轮的左右两个的结果:
这个是左边的结果:
11010010100011010000010001011110
这个是右边的结果:
00011100111010101100001011111011
7.
这个是选择运算的结果:
100011111001011101010101011000000101011111110110
这个是异或运算的结果:
101000001110001000000100101100001001000011001110
这里是S盒变换的结果:
110101000110111001110111000000010000111101101110
这是对S盒变换内容做P置换以后的内容:
00100000111001011011100011011110
这个是解密函数中第7轮的左右两个的结果:
这个是左边的结果:
00011100111010101100001011111011
这个是右边的结果:
11110010011010001011110010000000
8.
这个是选择运算的结果:
011110100100001101010001010111111001010000000001
这个是异或运算的结果:
010111000011100000001010100101000000111001000001
这里是S盒变换的结果:
101111011101011011001100111000010000111101101110
这是对S盒变换内容做P置换以后的内容:
00010101110111010101111100011011
这个是解密函数中第8轮的左右两个的结果:
这个是左边的结果:
11110010011010001011110010000000
这个是右边的结果:
00001001001101111001110111100000
9.
这个是选择运算的结果:
000001010010100110101111110011111011111100000000
这个是异或运算的结果:
101100100111101011111101001010101110001101010000
这里是S盒变换的结果:
001000011001001010100011000110100000111101101110
这是对S盒变换内容做P置换以后的内容:
00001111011000100110001110000000
这个是解密函数中第9轮的左右两个的结果:
这个是左边的结果:
00001001001101111001110111100000
这个是右边的结果:
11111101000010101101111100000000
10.
这个是选择运算的结果:
011111111010100001010101011011111110100000000001
这个是异或运算的结果:
110010110111101010100110011000110100000100111011
这里是S盒变换的结果:
110011001111000011010100001001010000111101101110
这是对S盒变换内容做P置换以后的内容:
00100101100011011000110100111100
这个是解密函数中第10轮的左右两个的结果:
这个是左边的结果:
11111101000010101101111100000000
这个是右边的结果:
00101100101110100001000011011100
11.
这个是选择运算的结果:
000101011001010111110100000010100001011011111000
这个是异或运算的结果:
111101000000011000000110011010000100101110011010
这里是S盒变换的结果:
011011111011001100001010111000000000111101101110
这是对S盒变换内容做P置换以后的内容:
11010100011110001100011100010101
这个是解密函数中第11轮的左右两个的结果:
这个是左边的结果:
00101100101110100001000011011100
这个是右边的结果:
00101001011100100001100000010101
12.
这个是选择运算的结果:
100101010010101110100100000011110000000010101010
这个是异或运算的结果:
011101001111110110000011001100011011000010000011
这里是S盒变换的结果:
001111101100100010111011101111110000111101101110
这是对S盒变换内容做P置换以后的内容:
01111011001010110010111111110011
这个是解密函数中第12轮的左右两个的结果:
这个是左边的结果:
00101001011100100001100000010101
这个是右边的结果:
01010111100100010011111100101111
13.
这个是选择运算的结果:
101010101111110010100010100111111110100101011110
这个是异或运算的结果:
010010100101101111000101110111111101111010010101
这里是S盒变换的结果:
101010100111101110011000010101100000111101101110
这是对S盒变换内容做P置换以后的内容:
11110111110110110000001001100100
这个是解密函数中第13轮的左右两个的结果:
这个是左边的结果:
01010111100100010011111100101111
这个是右边的结果:
11011110101010010001101001110001
14.
这个是选择运算的结果:
111011111101010101010010100011110100001110100011
这个是异或运算的结果:
001111110010100001110100011110011100001100101111
这里是S盒变换的结果:
000110000001001110010101100011010000111101101110
这是对S盒变换内容做P置换以后的内容:
10101101010010000010100000101011
这个是解密函数中第14轮的左右两个的结果:
这个是左边的结果:
11011110101010010001101001110001
这个是右边的结果:
11111010110110010001011100000100
15.
这个是选择运算的结果:
011111110101011011110010100010101110100000001001
这个是异或运算的结果:
001011111011100000010110110110101100101101001110
这里是S盒变换的结果:
001001011101010101011100101000010000111101101110
这是对S盒变换内容做P置换以后的内容:
10110100000001010101111100011001
这个是解密函数中第15轮的左右两个的结果:
这个是左边的结果:
11111010110110010001011100000100
这个是右边的结果:
01101010101011000100010101101000
16.
这个是选择运算的结果:
001101010101010101011000001000001010101101010000
这个是异或运算的结果:
011001010111100111100110001101111000000110010010
这里是S盒变换的结果:
100110100000000011010001111010010000111101101110
这是对S盒变换内容做P置换以后的内容:
01101001100111000010110000000011
这个是解密函数中第16轮的左右两个的结果:
这个是左边的结果:
10010011010001010011101100000111
这个是右边的结果:
01101010101011000100010101101000
这个是最终解密的结果:
0101110111000101001110011010011001000100101001101001101001100000
文章评论(0条评论)
登录后参与讨论