随着计算机网络的发展,计算机信息的保密问题显得越来越重要。
密码技术就是对计算机信息进行保护的技术。
采用密码技术对信息进行加密:将可识别的信息变为无法识别的信息,再将加密后的信息传输过去,使信息在传输过程中几十倍窃取或截获,窃取者也不能了解信息的内容,从而保证信息传输的安全。
凯撒密码就是一种非常古老的加密方法,凯撒密码是古罗马凯撒大帝用来对军事情报进行加密的算法.
凯撒密码的原理很简单,就是采用替换方法对信息中的每一个英文字符循环替换为字母表序列中该字符后面第三个字符,对应关系如下:
原文:abcdefghijklmnopqrstuvwxyz
密文:defghijklmnopqrstuvwxyzabc
原文:ABCDEFGHIJKLMNOPQRSTUVWXYZ
密文:DEFGHIJKLMNOPQRSTUVWXYZABC
【Analysis】
- 本例就是设计采用凯撒密码对信息进行加密和解密的算法,假设原文字符 m,则其对应的密文字符 c 为:
- c[i]=(m[i]-‘a’+3)%26+‘a’; (对于小写字母)
- c[i]=(m[i]-‘A’+3)%26+‘A’; (对于大写字母)
- 解密方法反之,假设密文字符 c,则其对应的原文字符 m 为:
- m[i]=(c[i]-‘a’-3+26)%26+‘a’; (对于小写字母)
- m[i]=(c[i]-‘A’-3+26)%26+‘A’; (对于大写字母)
【Solution】
#include <stdio.h>
void encrypt(char m[],char c[]);
void decrypt(char m[],char c[]);
int main(int argc, char *argv[])
{
char m[200],c[200];
int select;
printf("主菜单: \n");
printf("1.加密\n");
printf("2.解密\n");
printf("3.退出\n");
while(1){
printf("请选择:");
scanf("%d",&select);
switch(select){
case 1:
getchar();
printf("请输入明文:");
gets(m);
encrypt(m,c);
printf("加密后的结果是:%s\n",c);
break;
case 2:
getchar();
printf("请输入密文:");
gets(c);
decrypt(m,c);
printf("解密后的结果是:%s\n",m);
break;
case 3:
return 0;
}
}
return 0;
}
void encrypt(char m[],char c[]){
int i;
for(i=0;m[i]!='\0';i++)
if(m[i]>='a'&&m[i]<='z')
c[i]=(m[i]-'a'+3)%26+'a';
else if(m[i]>='A'&&m[i]<='Z')
c[i]=(m[i]-'A'+3)%26+'A';
else c[i]=m[i];
c[i]='\0';
}
void decrypt(char m[],char c[]){
int i;
for(i=0;c[i]!='\0';i++)
if(c[i]>='a'&&c[i]<='z')
m[i]=(c[i]-'a'-3+26)%26+'a';
else if(c[i]>='A'&&c[i]<='Z')
m[i]=(c[i]-'A'-3+26)%26+'A';
else m[i]=c[i];
m[i]='\0';
}