教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 综合文档 >

DES加密算法分析(3)

来源:网络收集 时间:2026-08-29
导读: 陕西理工学院毕业论文(设计) 这个函数整个算法运行程序的最主要部分。这个函数用于加密还是解密取决于type的类型,如果type为encrypt,则进行加密;如果type的类型为decrypt,则进行解密。 void des_run(char out[

陕西理工学院毕业论文(设计)

这个函数整个算法运行程序的最主要部分。这个函数用于加密还是解密取决于type的类型,如果type为encrypt,则进行加密;如果type的类型为decrypt,则进行解密。 void des_run(char out[8],char in[8], bool type) {

static bool m[64],tmp[32],*li=&m[0], *ri=&m[32]; bytetobit(m,in,64);

transform(m,m,ip_table,64); if(type==encrypt){

for(int i=0;i<16;i++){ memcpy(tmp,ri,32); f_func(ri,subkey[i]); xor(ri,li,32);

memcpy(li,tmp,32); }

}else{

for(int i=15;i>=0;i--){ memcpy(tmp,li,32); f_func(li,subkey[i]); xor(li,ri,32);

memcpy(ri,tmp,32); }

}

transform(m,m,ipr_table,64); bittobyte(out,m,64); }

这个函数用到以下函数: (1) bytetobit()

此函数的功能是将输入的字节组转换为位组。 (2) transform()

此函数是通用置换函数,根据具体情况确定要执行哪种置换。 (3) memcpy()

此函数是库函数,主要作用是进行内存单元的复制。 (4) f_func()

此函数是des_run()函数运行的关键,是将32比特的输入转化为32比特的输出 (5)xor()

此函数的功能是进行异或运算,异或运算是按位作不进位加法运算。 (6)bittobyte()

此函数的功能是将位组转换字节组。

3.4 DES算法的主函数void main()

主函数的流程: void main() {

char key[8]={'p','r','o','g','r','a','m'},str[8];

puts(\ printf(\

第11页共21页

陕西理工学院毕业论文(设计)

printf(\

puts(\ gets(str); printf(\

puts(\ des_setkey(key);

des_run(str,str,encrypt); puts(\ puts(str); printf(\

puts(\ puts(\ des_run(str,str,decrypt); puts(str); printf(\

puts(\ printf(\

}

此函数贯穿整个函数。首先是初设密钥,然后调用密钥设置函数des_setkey()和DES算法的运行函数des_run(),最后得出密文以及解密后的文字。

3.5 DES的加密过程和举例

设明文m=computer,密钥k为program,它们用ASCII码表示为: m= 01100011 01101111 01101101 01110000 01110101 01110100 01100101 01110010 k= 01110000 01110010 01101111 01100111 01110010 01101101 01101101

这里的k只有56位,由于第8,16,24,32,40,48,58,64位不起作用,所以没有赋值。也就是其中的k8 k16 k24 k32 k40 k48 k56 k64不起作用。其中的密钥为64比特如下:

k=0111000*0011100*1001101*1110110* 0111011*1001001*1000010*1101101*

在这里密钥K是在主函数中已设定,所以在程序运行时只输入明文就可以了。 密钥k经过PC-1置换后,分成两组C0,D0。可得 C0=11101100 10011001 00011011 1011 D0=10110100 01011000 10001110 0111

C0,D0 分别进行循环左移运算,得到C1,D1。 C1=11011001 00110010 00110111 0111 D1=01101000 10110001 00011100 1111

依次类推,C1,D1继续进行循环左移,最后得到C2,D2进行循环左移,得到C3,D3??C16,D16。

C1,D1进行PC-2置换,得到密钥k1,可得:

K1=00111101 10001111 11001101 00110111 00111111 01001000

依次类推,C2,D2进行PC-2置换,得到密钥k2, C3,D3进行PC-2置换得到k3,??C16,D16进行PC-2置换得到k16。

明文M进行IP置换后,分成两组:L0,R0,可得: L0=11111111 10111000 01110110 01010111

第12页共21页

陕西理工学院毕业论文(设计)

R0=00000000 11111111 00000110 10000011

R0进行E膨胀后,与密钥k1进行异或运算,得到48比特的数据 S=10111101 10011000 00110011 10110111 11101011 01001110 将这些数据分别装入S盒:

(1) 101111进入S1,从S1的第3行第7列的元素7,可知其输出为0111 (2) 011001进入S2,从S2的第1行第12列的元6,可知其输出为0110 (3) 100000进入S3,从S3的第2行第0列的元素13,可知其输出为1101 (4) 110011进入S4,从S4的第3行第9列的元素4,可知其输出为0100 (5) 101101进入S5,从S5的第3行第6列的元素2,可知其输出为0010 (6) 111110进入S6,从S6的第2行第15列的元素6,可知其输出为0100 (7) 101101进入S7,从S7的第3行第6列的元素10,可知其输出为1010 (8) 001110进入S8,从S8的第0行第7列的元素1,可知其输出为0001 故8个S盒的输出为:

01110110 11010100 00100110 10100001 最后通过P得f(R0,k1)为:

01110110 11010100 00100110 10100001 L0 f(R0,k1)得到R1:

R1=10111011 10011001 11101001 11001100

L1= R0=00000000 11111111 00000110 10000011 经过16轮的迭代最后得到:

L16= R15=01010010 10011000 11000001 01011010 R16=11101000 10000011 01111000 01001100 最后经过IP逆置换后得到密文如下:

00100100 01100001 00000010 10011011 01011001 10001000 11001111 10110100

程序解密过程(略) 3.6 DES算法的分析

DES算法具有极高安全性,最初,除了用穷举搜索法对DES算法进行攻击外,并没有发现更有效的办法。而56位长的密钥的穷举空间为256,这意味着如果一台计算机的速度是每一秒种检测一百万个密钥,则它搜索完全部密钥就需要将近2285年的时间,可见,这是难以实现的,当然,随着科学技术的发展,当出现超高速计算机后,我们可考虑把DES密钥的长度再增长一些,以此来达到更高的保密程度[4]。

在DES算法作为一个标准时,曾出现过许多的批评,其中之一就是针对S盒的。DES里的所有计算,除去S盒全是线性的,也就是说,计算两个输出的异或与先将两个对应输入异或再计算其输出是相同的。作为非线性部件,S盒针对密码体制的安全性至关重要。在算法提出时,就有人怀疑S盒隐藏了“陷门”。而美国国家安全局能够轻易的解密消息,同时还能宣称DES算法是“安全”的。当然无法否认这 …… 此处隐藏:4192字,全部文档内容请下载后查看。喜欢就下载吧 ……

DES加密算法分析(3).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/404890.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)