一、实验目的及要求
1. 掌握凯撒密码工作原理
2. 编写程序实现凯撒加密
二、实验设备(环境)及要求
PC机, VC++等
三、实验内容与步骤
1、凯撒加密(对代码中的主要内容进行分析讲解)
步骤:
- 先调用scanf函数将要加密的字符串与k值输入;
- 接着判断k值是属于[0,25]区间,如果不属于,则输出“k值不合法”,并结束程序;
- 然后对要加密的字符串的每个字符进行挨个加密,加密方法:先判断加密前的字符与‘z’字符之间的差值是否小于k,如果小于k说明该字符加上k值后会超出范围,所以该字符加密应先用k减去差值减去1,再将结果加到‘a’上,即 b[i]='a'+(k-('z'-a[i])-1);如果大于等于k则直接再原有字符的基础上加上k,得出结果即可
- 输出结果
- 解密
步骤:
(1)先调用scanf函数将要解密的字符串与k值输入;
(2)接着判断k值是属于[0,25]区间,如果不属于,则输出“k值不合法”,并结束程序;
(3)然后对要解密的字符串的每个字符进行挨个解密,解密方法:先判断加密的字符与‘a’字符之间的差值是否小于k,如果小于k说明该字符的明文加上k值后会超出范围,所以该字符解密应先用k减去差值减去1,再用‘z’减去结果,即b[i]='z'-(k-(a[i]-'a')-1);;如果大于等于k则直接再原有字符的基础上减上k,得出结果即可
(4)输出明文结果
代码
//凯撒加密
#include<stdio.h>
int main()
{
char a[100],b[100];
int i,k;
printf("请输入要加密的字符串(小写字母):\n");
scanf("%s",a);
printf("请输入k值(0<=k<=25):\n");
scanf("%d",&k);
if(k<0||k>25)
{
printf("k值不合法");
}
else
{
for(i=0;a[i]!='\0';i++)
{
if(k>('z'-a[i]))
{
b[i]='a'+(k-('z'-a[i])-1);
}
else
{
b[i]=a[i]+k;
}
}
b[i]='\0';
printf("加密后的密文:%s\n",b);
}
return 0;
}
//解密
#include<stdio.h>
int main()
{
char a[100],b[100];
int i,k;
printf("请输入已加密的字符串(小写字母):\n");
scanf("%s",a);
printf("请输入k值(0<=k<=25):\n");
scanf("%d",&k);
if(k<0||k>25)
{
printf("k值不合法");
}
else
{
for(i=0;a[i]!='\0';i++)
{
if(k>(a[i]-'a'))
{
b[i]='z'-(k-(a[i]-'a')-1);
}
else
{
b[i]=a[i]-k;
}
}
b[i]='\0';
printf("明 文:%s\n",b);
}
return 0;
}
四、实验结果与数据处理
(1)对“abxz”这个字符串进行加密,k值为10
(2)对以上加密后的字符串进行解密
五、分析与讨论
通过该实验,我深入了解了凯撒密码的工作原理:主要是用E=P-K,0<=K<=25,这个公式进行加密,如果加密完的结果大于‘z’,则应将超出部分加到‘a’上。对于解密则反之。
|