您好,欢迎访问三七文档
电子信息学院实验报告书课程名:网络安全技术题目:列置换加解密的编码实现实验类别【验证】班级:BX1009学号:29姓名:闫彬评语:实验态度:认真()一般()较差()实验结果:正确()部分正确()错()实验理论:掌握()熟悉()了解()生疏()操作技能:较强()一般()较差()实验报告:较好()一般()较差()成绩:指导教师:熊鹏批阅时间:2013年4月10日《网络工程与组网设计》实验报告-11、实验内容或题目利用C实现Columnpermutationcipher(列置换)加解密。明文按行填写在一个矩阵中,而密文则是以预订的顺序按列读取生成。如果矩阵是4行5列,那么短语“ENCRYPTIONALGORITHMS”可以如下写入该矩阵中:按一定的顺序读取生成密文。对于上面的例子,如果读取顺序是4123那么密文就是“RILISEYOGTNPNOHCTARM”这种方法要求填满矩阵,因此字母不够的时候就得填充X或Q等无效字符。2、实验目的与要求(1)熟悉古典加密算法。(2)利用C实现Columnpermutationcipher加解密。(3)巩固加深C编程能力。3、实验步骤(1)利用VC6.0建立主函数main();#includestdio.h#includestring.h#includestdlib.h#includectype.hintmain(intargc){char*str1,*key,*str3,c;str1=(char*)malloc(500);key=(char*)malloc(500);str3=(char*)malloc(500);printf(ColumnpermutationcipherEncryption&Decryption\n----------------------------\nPleaseselectwhichtype\nE:Encription\nD:Decription\nQ:Quit\n----------------------------\n);c=getchar();while(c!='q'&&c!='Q'){if(c=='E'||c=='e'){getchar();printf(Pleaseinputtheplaintext:\n);gets(str1);《网络工程与组网设计》实验报告-2printf(PleaseinputtheEncrptionKey:\n);gets(key);printf(Thecipheris:\n);Encryption(str1,key);printf(ColumnpermutationcipherEncryption&Decryption\n----------------------------\nPleaseselectwhichtype\nE:Encription\nD:Decription\nQ:Quit\n----------------------------\n);c=getchar();}else{getchar();printf(PleaseinputtheDecryptionKey:\n);gets(key);printf(Pleaseinputtheciphertext:\n);gets(str3);printf(Theplaintextis:\n);Decryption(key,str3);printf(ColumnpermutationcipherEncryption&Decryption\n----------------------------\nPleaseselectwhichtype\nE:Encription\nD:Decription\nQ:Quit\n----------------------------\n);c=getchar();free(str1);free(key);free(str3);}}return0;}(2)编写加密函数voidEncryption(charstr1[],charkey[]){inti,j;charnum[300];intplen=strlen(str1);intlen=strlen(key);for(i=0;ilen;i++){num[i]=1;for(j=0;jlen;j++){if(key[j]key[i])num[i]++;}for(j=0;ji;j++){if(key[j]==key[i])num[i]=num[i]+1;}《网络工程与组网设计》实验报告-3}printf(\n);for(i=0;ilen;i++){for(j=0;jplen/len;j++)printf(%c,str1[j*len+num[i]-1]);printf();}printf(\n);}(3)编写解密函数voidDecryption(charkey[],charstr3[]){inti,j;charnum[500];charcnum[500];intclen=strlen(str3);intlen=strlen(key);for(i=0;ilen;i++){num[i]=1;for(j=0;jlen;j++){if(key[j]key[i])num[i]++;}for(j=0;ji;j++){if(key[j]==key[i])num[i]=num[i]+1;}}for(i=0;ilen;i++){for(j=0;jlen;j++)if(i+1==num[j])cnum[i]=j;}for(i=0;iclen/len;i++){for(j=0;jlen;j++)printf(%c,str3[cnum[j]*clen/len+i]);printf();}printf(\n);}(3)运行并观察、记录结果。《网络工程与组网设计》实验报告-44、测试数据与实验结果(可以抓图粘贴)(1)实验数据与结果。(2)实验数据与结果。《网络工程与组网设计》实验报告-55、实验过程中存在的问题用英文字母当秘钥是,是不能正确把密文翻译成明文。6、结果分析与实验体会本次实验的内容是利用C语言编写一段程序实现Columnpermutationcipher(列置换)加解密,按照实验内容将明文按行填写在一个矩阵中,而密文则是以预订的顺序按列读取生成。然后在进行解密,输入秘钥和密文可以看到正确的明文。通过本次实验,我对古典的加密算法有了一定的认识,对于老师给定的C语言程序有了深刻的理解,巩固加深了C语言编程能力。
本文标题:实验4-列置换密码
链接地址:https://www.777doc.com/doc-4521648 .html