shiyan1 kaisajiami
- 格式:docx
- 大小:17.52 KB
- 文档页数:4
凯撒密码
凯撒密码(caeser)是罗马扩张时期朱利斯•凯撒(Julius Caesar)创造的,用于加密通
过信使传递的作战命令。它将字母表中的字母移动一定位置而实现加密。
他的原理很简单,说到底就是字母与字母之间的替换。每一个字母按字母表顺序向后移
3位,如a加密后变成d,b加密后变成e,„„x加密后变成a,y加密后变成b,z加密后
变成c。
例如:“baidu”用凯撒密码法加密后字符串变为“edlgx”。
试写一个算法,将键盘输入的文本字符串(只包含a~z的字符)进行加密后输出。
另写一个算法,将已加密后的字符串解密后输出。
提示:
如果有字符变量c加密后则=’a’+(c-‘a’+3)%26
采用顺序结构存储串,键盘输入字符串后保存到顺序串中;输出用顺序串的输出函数。
源程序如下:
#include
#define MaxSize 100
typedef struct
{
char ch[MaxSize];
int len;
}SqString;
void SetString(SqString &s) //设置源码
{
int i;
printf("请输入原字符串:");
scanf("%s",s.ch);
for(i=0;s.ch[i]!='\0';i++);
s.len=i;
}
void TranString(SqString s,SqString &t) //开始加密
{
int i;
for(i=0;i
if(s.ch[i]>='a'&&s.ch[i]<='z')
t.ch[i]='a'+(s.ch[i]-'a'+3)%26;
else
t.ch[i]=s.ch[i];
}
t.len=s.len;
}
void RecoverString(SqString s,SqString &t) //开始解密
{
int i;
for(i=0;i
if(s.ch[i]>='d'&&s.ch[i]<='z')
t.ch[i]=s.ch[i]-3;
else if(s.ch[i]>='a'&&s.ch[i]<='c')
t.ch[i]=s.ch[i]+23;
else
t.ch[i]=s.ch[i];
}
t.len=s.len;
}
void DispString(SqString s) //输出字符串
{
int i=0;
while(i
printf("%c",s.ch[i]);
i++;
}
printf("\n");
}
int main()
{
SqString s1,s2,s3; //s1是源码,s2是加密后密码,s3是解密后密码
SetString(s1);
DispString(s1);
TranString(s1,s2);
DispString(s2);
RecoverString(s2,s3);
DispString(s3);
return 0;
}