1、1.通过预习和老师在实验课上的讲解,理解代替密码和移位密码的本质差别,对程序的作用有初步了解;2.分析实验指导书上所列代码,搞清楚各个子函数的功能、理清程序的大体思路;3.将主函数与各个子函数进行合并整合,处理编译上出现的语法问题,使编译可以顺利通过;4.完善程序,输入数据对程序的逻辑功能进行验证,测试随机数结构调用是否完整,测试结果是否符合对应的加密要求,验证打开关闭文件是否顺利。六、思考题“代替表”与“置换”的不动点、逆等是否一致?答: 不一致。代替是约定明文集合到另一集合的关系,不一定是原来的集合,而移位是在 明文集合中进行随机排列然后得到的密文。两者的不动点、逆等只有在统一集合变换时
2、才可能一致。七、实验代码及运行结果实验代码:1. 代替密码#includetime.hstring.hctype.hstdlib.h/*声明子函数*/unsigned char *full_array2(char n); /*fully_array函数产生随机数*/ int letter_to_digit(char c);char digit_to_letter(int n);unsigned char *KeyGen_s( );void Encrypt_s(unsigned char *key);/*主函数*/int main()printf(-代替密码加密算法-n);Encrypt_s(K
3、eyGen_s();system(pausereturn 0;unsigned char *full_array2(char n) /*fully_array函数产生随机数*/ int m,i,j,k,l =0,flag;static unsigned char P256;start:n请输入不小于%d的所有随机数个数:n,n+1);scanf(%d,&m);if(m=n)n输入数%d比%d小,须重新输入!,m,n+1);goto start;srand(unsigned)time(NULL);/*初始化随机种子*/for(i=0;im;i+)Pl+=(unsigned char)(rand(
4、)%(n+1);for(j=0;jl-1;j+)if(Pj=Pl-1)l-;break;k=l;=n;flag=0;k;if(Pj=i)flag=l;if(!flag)Pl=i;l+;return(P);int letter_to_digit(char c)int i;char alphabet27=abcdefghijklmnopqrstuvwxyz; for(i=0;26;i+) if(tolower(c)=alphabeti) return(i);return(-1);char digit_to_letter(int n)if(n25) return(0);return(alphabet
5、n);unsigned char *KeyGen_s( )char KeyWords106;char ChoiceWords26;unsigned char *p;static unsigned char KeyTab26*3;int i,j,k,l;n 请输入密钥字:gets(KeyWords);strcat(KeyWords,k=0;l=strlen(KeyWords);ChoiceWordsk=tolower(KeyWords0);for(i=1;l;if(letter_to_digit(KeyWordsi)=-1) continue;ChoiceWords+k=tolower(KeyW
6、ordsi); for(j=0;if(ChoiceWordsj=ChoiceWordsk)k-;KeyTabi=(unsigned char)letter_to_digit(ChoiceWordsi);p=full_array2(25);KeyTab26+i=pi;KeyTab52+i=(unsigned char)(7*i+3)%26);return(KeyTab);void Encrypt_s(unsigned char *key)FILE *fp;char filename20,c;n 请输入待加密文本文件名:%s,filename);if( (fp=fopen(filename,rt)
7、=NULL )没有找到文件:%snn 密文如下:i=0;while(c=fgetc(fp)!=EOF)if(letter_to_digit(c)=-1)putchar(c);continue;/公式选为 7*i+3(mod 26)isupper(c)?putchar(toupper(digit_to_letter(key(int)(i/26)*26+letter_to_digit(c): putchar(digit_to_letter(key(int)(i/26)*26+letter_to_digit(c); i+;if(i=26*3) i=0;fclose(fp);2. 移位密码int le
8、tter_to_digit(char c) ;char digit_to_letter(char n) ;unsigned char *KeyGen_p( ) ;void Encrypt_p(unsigned char *key) ;-移位密码加密算法-nEncrypt_p(KeyGen_p();(周期为5)n scanf(int letter_to_digit(char c) /*将字母转化为数字*/char digit_to_letter(char n)/*将数字转化为字母*/unsigned char *KeyGen_p( )/*产生密钥*/static unsigned char Ke
9、yTab16*5;int i,j;5;p=full_array2(15);16;KeyTab16*i+j=pj;void Encrypt_p(unsigned char *key) /*实现明文加密*/char d16; goto start; di%16=c;i+;if(i%16!=0) continue;putchar(dkey(int)(i-1)/16)*16+j); if(i=16*5) i=0;=0)for(j=i%16;j+)dj=*;putchar(dkey(int)(i/16)*16+j);putchar(n附录:运行结果截图 荐 计算机上机实验内容及实验报告要求 荐 构建学校德育管理与评价体系的实验报告 荐 化学实验报告格式 荐 大学物理实验课程设计实验报告 荐 电路实验报告要求
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1