凯撒密码加密解密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';
}
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);
}
return 0;
}