欢迎来到天天文库
浏览记录
ID:39086895
大小:17.96 KB
页数:3页
时间:2019-06-24
《凯撒密码解密源代码》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、#include#include#includeusingnamespacestd;voidmain(intargc,char*argv[]){FILE*fp_ciper,*fp_plain;//密文与明文的文件指针charch_ciper,ch_plain;inti,temp=0;//i用来存储最多次数出现的下标//temp用在求最多次数时用intkey;intj;intnum[26];//保存密文中字母出现次数for(i=0;i<26;i++){cout<<"=====================
2、============"<3、getc(fp_ciper))!=EOF)//EOF=EndOfFile定义:constintEOF=-1;{switch(ch_ciper)//统计密文各字母出现的次数{case'A':num[0]=num[0]+1;break;case'B':num[1]=num[1]+1;break;case'C':num[2]=num[2]+1;break;case'D':num[3]=num[3]+1;break;case'E':num[4]=num[4]+1;break;case'F':num[5]=num[5]+1;break;case'G':num[6]=num4、[6]+1;break;case'H':num[7]=num[7]+1;break;case'I':num[8]=num[8]+1;break;case'J':num[9]=num[9]+1;break;case'K':num[10]=num[10]+1;break;case'L':num[11]=num[11]+1;break;case'M':num[12]=num[12]+1;break;case'N':num[13]=num[13]+1;break;case'O':num[14]=num[14]+1;break;case'P':num[15]=num[155、]+1;break;case'Q':num[16]=num[16]+1;break;case'R':num[17]=num[17]+1;break;case'S':num[18]=num[18]+1;break;case'T':num[19]=num[19]+1;break;case'U':num[20]=num[20]+1;break;case'V':num[21]=num[21]+1;break;case'W':num[22]=num[22]+1;break;case'X':num[23]=num[23]+1;break;case'Y':num[24]=nu6、m[24]+1;break;case'Z':num[25]=num[25]+1;break;}fclose(fp_ciper);for(i=0;i<26;i++){if(num[i]>temp){i=j;//求出最大次数的下标temp=num[i];}}if(j<5)key=(j+1+26)-5;//是按照字母表的第几位计算,而不是按下标,//故加1,5是指E在字母表中的位置else{key=(j+1)-5;}if((fp_ciper=fopen(argv[1],"r"))==NULL){cout<<"再次打开密文出错!解密失败"<7、//再次打开密文,进行解密if((fp_plain=fopen(argv[2],"W"))==NULL){cout<<"打开或建立明文文件出错!解密失败"<'E')ch_plain=(((ch_ciper-'A'-key)%26)+'A');//解密elsech_plain=(((ch_ciper-'A'-key+26)%26)+'A');ch_plain=tolower(ch_plain);//把大写明文转8、换为小写fputc(ch
3、getc(fp_ciper))!=EOF)//EOF=EndOfFile定义:constintEOF=-1;{switch(ch_ciper)//统计密文各字母出现的次数{case'A':num[0]=num[0]+1;break;case'B':num[1]=num[1]+1;break;case'C':num[2]=num[2]+1;break;case'D':num[3]=num[3]+1;break;case'E':num[4]=num[4]+1;break;case'F':num[5]=num[5]+1;break;case'G':num[6]=num
4、[6]+1;break;case'H':num[7]=num[7]+1;break;case'I':num[8]=num[8]+1;break;case'J':num[9]=num[9]+1;break;case'K':num[10]=num[10]+1;break;case'L':num[11]=num[11]+1;break;case'M':num[12]=num[12]+1;break;case'N':num[13]=num[13]+1;break;case'O':num[14]=num[14]+1;break;case'P':num[15]=num[15
5、]+1;break;case'Q':num[16]=num[16]+1;break;case'R':num[17]=num[17]+1;break;case'S':num[18]=num[18]+1;break;case'T':num[19]=num[19]+1;break;case'U':num[20]=num[20]+1;break;case'V':num[21]=num[21]+1;break;case'W':num[22]=num[22]+1;break;case'X':num[23]=num[23]+1;break;case'Y':num[24]=nu
6、m[24]+1;break;case'Z':num[25]=num[25]+1;break;}fclose(fp_ciper);for(i=0;i<26;i++){if(num[i]>temp){i=j;//求出最大次数的下标temp=num[i];}}if(j<5)key=(j+1+26)-5;//是按照字母表的第几位计算,而不是按下标,//故加1,5是指E在字母表中的位置else{key=(j+1)-5;}if((fp_ciper=fopen(argv[1],"r"))==NULL){cout<<"再次打开密文出错!解密失败"<7、//再次打开密文,进行解密if((fp_plain=fopen(argv[2],"W"))==NULL){cout<<"打开或建立明文文件出错!解密失败"<'E')ch_plain=(((ch_ciper-'A'-key)%26)+'A');//解密elsech_plain=(((ch_ciper-'A'-key+26)%26)+'A');ch_plain=tolower(ch_plain);//把大写明文转8、换为小写fputc(ch
7、//再次打开密文,进行解密if((fp_plain=fopen(argv[2],"W"))==NULL){cout<<"打开或建立明文文件出错!解密失败"<'E')ch_plain=(((ch_ciper-'A'-key)%26)+'A');//解密elsech_plain=(((ch_ciper-'A'-key+26)%26)+'A');ch_plain=tolower(ch_plain);//把大写明文转
8、换为小写fputc(ch
此文档下载收益归作者所有