它的原理是字母与字母之间的替换。例如26个字母都向后移动K位。若K等于2,则A用C代替,B用D代替,以此类推
k是移动的位数,例如移动两位,当前字母是c,那么c-a=2,再加2,4%26=4(保证变换后的在26个字母的范围内),然后a+4即为e
/*
和楼上的相比,或许 看上去很烦
ch[i] +=5;
if (ch[i] 'Z')
{
ch[i] -= 26;
}
可以改成和 楼上的 方法
等价于 ch[i] = 'A' + (ch[i] - 'A' + 5) % 26;
*/
# include stdio.h
# include stdlib.h //用到了system(); 不写 ,可以用 getchar();
#define strwidth 117 //定义长度
int main(void)
{
char ch[strwidth];
int i ;
printf("请输入密码:");
gets(ch); //输入数据,用gets(); 保留了空格
for (i = 0; i strwidth ;i++ )
{
if (ch[i] = 'a' ch[i] = 'z' ) //判断是否小写字母
{
ch[i] +=5;
if (ch[i] 'z') //不解释,我想这样,理解可能会方便点吧
{
ch[i] -= 26;
}
}
else if ( ch[i] = 'A' ch[i] = 'Z') //判断是否大写字母
{
ch[i] +=5;
if (ch[i] 'Z')
{
ch[i] -= 26;
}
}
}
printf("加密后为:%s\n" , ch); //输出数据
system("pause");
return 0;
}
/*
或者 这样
*/
# include stdio.h
# include stdlib.h //用到了system(); 不写 ,可以用 getchar();
#define strwidth 117 //定义长度
int main(void)
{
char ch[strwidth];
int i ;
printf("请输入密码:");
gets(ch); //输入数据,用gets(); 保留了空格
for (i = 0; i strwidth ;i++ )
{
if (ch[i] = 'a' ch[i] = 'z' || ch[i] = 'A' ch[i] = 'Z' ) //判断是否是字母
{
ch[i] +=5;
if ( ch[i]'Z' ch[i] = 'Z' + 5 || ch[i] 'z' )
{
ch[i] -= 26;
}
}
}
printf("加密后为:%s\n" , ch); //输出数据
system("pause");
return 0;
}
按照题目要求编写的用凯撒密码加密的C语言程序如下
#includestdio.h
int main(){
char s[80];
int offset,i;
fgets(s,80,stdin);
scanf("%d",offset);
for(i=0;s[i]!='\0';i++){
if('A'=s[i] s[i]='Z')
if(offset=0)
s[i]='A'+(s[i]-'A'+offset)%26;
else
s[i]='A'+(s[i]-'A'+26+offset%26)%26;
else if('a'=s[i] s[i]='z')
if(offset=0)
s[i]='a'+(s[i]-'a'+offset)%26;
else
s[i]='a'+(s[i]-'a'+26+offset%26)%26;
}
printf("%s\n", s);
return 0;
}
凯撒密码是一种非常古老的加密方法,相传当年凯撒大地行军打仗时为了保证自己的命令不被敌军知道,就使用这种特殊的方法进行通信,以确保信息传递的安全。他的原理很简单,说到底就是字母于字母之间的替换。下面让我们看一个简单的例子:“baidu”用凯撒密码法加密后字符串变为“edlgx”,它的原理是什么呢?把“baidu”中的每一个字母按字母表顺序向后移3位,所得的结果就是刚才我们所看到的密文。
#include stdio.h
main()
{
char M[100];
char C[100];
int K=3,i;
printf("请输入明文M(注意不要输入空白串)\n");
gets(M);
for(i=0;M[i]!='\0';i++)
C[i]=(M[i]-'a'+K)%26+'a';
C[i]='\0';
printf("结果是:\n%s\n",C);
}
#include stdio.h
#include string.h
int main()
{
int i = 0;
int len = 0;
char ch;
char buf[256] = {0};
char nor[26] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
char enc[26] = {'s','u','w','y','a','c','e','g','i','k','m','o','q','r','t','v','x','z','b','d','f','h','j','l','n','p'};
printf("Encode or Decode: ");
scanf("%c",ch);
printf("please input your string: ");
fflush(stdin);
gets(buf);
len = strlen(buf);
switch (ch)
{
case 'e':
case 'E':
for (i=0;ilen;i++)
{
buf[i] = enc[buf[i] - 'a'];
}
break;
case 'd':
case 'D':
for (i=0;ilen;i++)
{
buf[i] = nor[i];
}
break;
default:
printf("wrong input!\n");
}
printf("%s\n",buf);
return 0;
}