凯撒密码加密解密C语⾔详细代码
凯撒密码加密解密C语⾔详细代码
凯撒密码
⼜叫循环移位密码.它的加密⽅法,就是将明⽂中的每个字母⽤此字符在字母表中后⾯第k个字母替代.它的加密过程可以表⽰为下⾯的函数:
E(m)=(m+k) mod n
其中:m为明⽂字母在字母表中的位置数;n为字母表中的字母个数;k为密钥;E(m)为密⽂字母在字母表中对应的位置数.
例如,对于明⽂字母H,其在字母表中的位置数为8,设k=4,则按照上式计算出来的
密⽂为L:
E(8) = (m+k) mod n = (8+4) mod 26 = 12 = L
解题思路
把⼀条消息中的每个字母⽤字母表中固定距离之后的那个字母代替。(如果超越了字母Z,会绕道字母表的起始位置。例如,如果每个字母都⽤字母表中两个位置之后的字母代替,那么Y就会被替换为A,Z就会被替换为B。),然后编写程序。
#include<stdio.h>
#include<string.h>
int main()
{
char passwd[100],encrypted[100];
int i,j,k,t,move,tmp;
printf("加密选择1,解密选择2:");
scanf("%d",&tmp);
if(tmp==1){
printf("输⼊原⽂:");
scanf("%s",&passwd);
printf("⾃定义密匙(1-25):");
scanf("%d",&move);
for(i=0; i<strlen(passwd); i++)
{
if(passwd[i]>='A'&& passwd[i]<='Z')
{
passwd[i]=((passwd[i]-'A')+move)%26+'A';
}
明解c语言else if(passwd[i]>='a'&& passwd[i]<='z')
{
passwd[i]=((passwd[i]-'a')+move)%26+'a';
}
}
printf("加密后的密⽂");
printf("%s\n",passwd);
}
else{
printf("输⼊密⽂:");
scanf("%s",&passwd);
printf("密匙为(1-25):");
scanf("%d",&move);
for(i=0; i<strlen(passwd); i++)
{
if(passwd[i]>='A'&& passwd[i]<='Z')
{
passwd[i]=((passwd[i]-'A')+26-move)%26+'A';
}
else if(passwd[i]>='a'&& passwd[i]<='z')
{
passwd[i]=((passwd[i]-'a')+26-move)%26+'a';
}
}
printf("解密后的原⽂");
printf("%s\n",passwd);
}
return0;
}