凯撒加密解密暴力破解实验报告C语言实现超详解

一、实验目的:

掌握凯撒加密解密算法,并学会实现凯撒加密解密

二、实验过程:

1. 学习凯撒加密解密的具体算法,想出对应的解题思路。其中对于此次试验凯撒加密解密均采用求模运算。以下C为密文,P为明文,key为密钥。

加密算法:C=P+key(mod 26)

解密算法:P=C-key(mod 26)

2.根据凯撒加密解密算法写出对应的程序代码,最后写出主函数对其进行调用。

3.运行并对此代码进行测试。

三、实验代码及结果:

(1)实验代码:

#include <stdio.h>

#include <string.h>



void kaisa_jiami(int key,char P[1000]){             //凯撒加密

       int i;      //定义i

       char C[1000];     //C为密文,定义密文字符串长度为1000

       for(i=0;i<strlen(P);i++){  //循环遍历输入的字符串P

              if(P[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;      //定义i

       char P[1000];//P为明文,定义明文字符串长度为1000

       for(i=0;i<strlen(C);i++){ //循环遍历输入的字符串C

              if(C[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,密文C

       printf("请输入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); //输入明文P



              kaisa_jiami(key,P);   //根据输入的key值和明文P调用加密函数kaisa_jiami

       }

       else if(a==2){     //如果输入的a值为1,则执行加密

              printf("请输入解密的密文:");    //输出“请输入解密的密文:”

             

              getchar();     //用来消除回车符,以免出现闪退

              gets(C);        //输入密文C

             

              kaisa_jiemi(key,C);   //根据输入的key值和密文C调用解密函数kaisa_jiemi

       }

       else{

              printf("输入错误!!!\n");//如果输入其他数值,则输出“输入错误!!!”,结束程序

       }



}

(2)实验结果:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值