凯撒加密解密暴力破解实验报告C语言实现超详解
一、实验目的:
掌握凯撒加密解密算法,并学会实现凯撒加密解密
二、实验过程:
1. 学习凯撒加密解密的具体算法,想出对应的解题思路。其中对于此次试验凯撒加密解密均采用求模运算。以下C为密文,P为明文,key为密钥。
加密算法:C=P+key(mod 26)
解密算法:P=C-key(mod 26)
2.根据凯撒加密解密算法写出对应的程序代码,最后写出主函数对其进行调用。
3.运行并对此代码进行测试。
三、实验代码及结果:
(1)实验代码:
#include #include void kaisa_jiami(int key,char P[1000]){ //凯撒加密int i; //定义ichar C[1000]; //C为密文,定义密文字符串长度为1000for(i=0;i='A'&&P[i]<='Z'){//当输入明文在A—Z之间时,依次对字母进行加密C[i]=(P[i]+key-'A')%26+'A'; //执行加密算法:C=P+key(mod 26)}else if(P[i]>='a'&&P[i]<='z'){ //当输入明文在a—z之间时,依次对字母进行加密C[i]=(P[i]+key-'a')%26+'a'; //执行加密算法:C=P+key(mod 26) }else C[i]=P[i]; //当输入的明文为空格或其他字符时,不对明文进行加密处理}C[i]='\0'; //字符串结束printf("加密后密文为:%s\n",C); //输出加密后的密文}void kaisa_jiemi(int key,char C[1000]){ //凯撒解密int i; //定义ichar P[1000];//P为明文,定义明文字符串长度为1000for(i=0;i='A'&&C[i]<='Z'){//当输入明文在A—Z之间时,依次对字母进行解密P[i]=((C[i]-'A')+26-key)%26+'A'; //执行解密算法:P=C-key(mod 26)}else if(C[i]>='a'&&C[i]<='z'){ //当输入明文在a—z之间时,依次对字母进行解密P[i]=((C[i]-'a')+26-key)%26+'a'; //执行解密算法:P=C-key(mod 26)}else P[i]=C[i]; //当输入的密文为空格或其他字符时,不对密文进行解密处理}P[i]='\0'; //字符串结束printf("解密后明文为:%s\n",P); //输出“解密后的明文”}int main(){ //主函数int key,a; //key值为秘钥,其中key的有效值为0~25。a值用于判断加密还是解密char P[1000],C[1000]; //定义明文P,密文Cprintf("请输入Key值:"); //输出“请输入Key值:”scanf("%d",&key); //输入key值printf("请选择加密还是解密,加密为1,解密为2:\n"); //输出“请选择加密还是解密,加密为1,解密为2:”scanf("%d",&a); //输入a值if(a==1){ //如果输入的a值为1,则执行加密printf("请输入加密的明文:"); //输出“请输入加密的明文:”getchar(); //用来消除回车符,以免出现闪退gets(P); //输入明文Pkaisa_jiami(key,P); //根据输入的key值和明文P调用加密函数kaisa_jiami}else if(a==2){ //如果输入的a值为1,则执行加密printf("请输入解密的密文:"); //输出“请输入解密的密文:”getchar(); //用来消除回车符,以免出现闪退gets(C); //输入密文Ckaisa_jiemi(key,C); //根据输入的key值和密文C调用解密函数kaisa_jiemi}else{printf("输入错误!!!\n");//如果输入其他数值,则输出“输入错误!!!”,结束程序}}
(2)实验结果:









本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
