凯撒密码

一、实验目的及要求

1. 掌握凯撒密码工作原理

2. 编写程序实现凯撒加密

 

二、实验设备(环境)及要求

   PC机, VC++等

三、实验内容与步骤

1、凯撒加密(对代码中的主要内容进行分析讲解)

步骤:

  1. 先调用scanf函数将要加密的字符串与k值输入;
  2. 接着判断k值是属于[0,25]区间,如果不属于,则输出“k值不合法”,并结束程序;
  3. 然后对要加密的字符串的每个字符进行挨个加密,加密方法:先判断加密前的字符与‘z’字符之间的差值是否小于k,如果小于k说明该字符加上k值后会超出范围,所以该字符加密应先用k减去差值减去1,再将结果加到‘a’上,即    b[i]='a'+(k-('z'-a[i])-1);如果大于等于k则直接再原有字符的基础上加上k,得出结果即可
  4. 输出结果

 

  1. 解密

步骤:

(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’上。对于解密则反之。

发布了32 篇原创文章 · 获赞 8 · 访问量 1万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章