网站大量收购独家精品文档,联系QQ:2885784924

[工学]DES加密算法课程设计报告.doc

  1. 1、本文档共37页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[工学]DES加密算法课程设计报告

软件实现流程图 二、标准DES的加密过程 1、明文与密钥的输入 首先8位ACSII字符的明文与密钥的输入,存放在mingwen[8]和miyao[8]中,然后将这些8位的ASCII字符转换成二进制的64位的明文和密钥,分别存放在mingwenB[64]和miyaoB[64]中,并将二进制的明文和密钥放在文件中 int str[8],i,j,ch,k; FILE *fp4;fp4=fopen(明文二进制.txt,w); k=0; for(i=0;i8;i++) { ch=mingwen[i]; for(j=0;j8;j++) { str[j]=ch%2; ch=ch/2; } for(j=7;j=0;j--) { mingwenB[k]=str[j]; k++; fprintf(fp4,%d,str[j]); } } 密钥的转换和存储同理。 2、密钥的产生 1)、64位miyaoB[64]经过pc-1置换,生成56位的比特串。定义pc1_Table[56],存放在afterpc1[56]中。 for(i=0;i56;i++) afterpc1[i]=miyaoB[pc1_Table[i]-1]; 2)、56位比特串分组,生成C0[28]和D0[28] for(i=0;i28;i++) C0[i]=afterpc1[i]; for(j=0,i=28;i56;i++,j++) D0[j]=afterpc1[i]; 3)、C0[28]、D0[28]进行左移,产生C[16][28]和D[16][28],为进行pc-2置换产生密钥做准备。 for(i=0;i27;i++) //第一轮数据生成C[0][28]与D[0][28] { C[0][i]=C0[i+1]; D[0][i]=D0[i+1]; } C[0][27]=C0[0]; D[0][27]=D0[0]; for(i=1;i16;i++) //第二轮数据至第十六轮数据生成 { if(i==1||i==8||i==15) { for(j=0;j27;j++) //左移1位 { C[i][j]=C[i-1][j+1]; D[i][j]=D[i-1][j+1]; } C[i][27]=C[i-1][0]; D[i][27]=D[i-1][0]; } else //左移2位 { for(j=0;j26;j++) { C[i][j]=C[i-1][j+2]; D[i][j]=D[i-1][j+2]; } C[i][26]=C[i-1][0]; C[i][27]=C[i-1][1]; D[i][26]=D[i-1][0]; D[i][27]=D[i-1][1]; } } //产生16轮左右数据,为pc-2置换准备。 4)、左右两部分比特串合并,存放在int beforekey[16][56]中 k=0; for(i=0;i16;i++) { for(j=0;j28;j++) beforekey[i][j]=C[i][j]; for(k=0;k28;k++,j++) beforekey[i][j]=D[i][k]; } 5)、beforekey[16][56]经过pc-2置换,产生16轮密钥keys[16][48], for(i=0;i16;i++) for(j=0;j48;j++) keys[i][j]=beforekey[i][pc_2table[j]-1]; 至此,16轮子密钥产生完毕,为keys[16][48]。 3、密文的产生 1)、明文经过初始置换IP置换。结果放在afterIP[64]中。 for(j=0;j64;j++) { afterIP[j]=mingwenB[IP_table[j]-1]; } 2)、明文的第0次分组,左部分L0[32],右部分R0[32]。 for(i=0;i32;i++) L0[i]=afterIP[i]; for(j=0,i=32;i64;i++,j++) R0[j]=afterIP[i]; 3)、为产生密文,要进行16轮的循环,每次循环生成一个L[i][32]和R[i][32],下面进行第一次循环,生成L[0][32]和R[0][32]。 for(i=0;i32;i++) //Li=R(i-1)

文档评论(0)

hhuiws1482 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:5024214302000003

1亿VIP精品文档

相关文档