凯撒加密算法

#include<iostream>
#include<cstring>/*文件cstring,和string.h对应,c++版本的头文件,
包含比如strcpy之类的字符串处理函数*/
#include<string>
using namespace std;
int main()
{
	cout<<"\n";
	cout<<"-----------------凯撒加密算法---------------"<<endl<<endl;
	char a[26];
	int i;
	for(i=0;i<26;i++)
	{
		a[i]=char(65+i);/*强制类型转换,因为a是字符型,所以这句话的意思就是将数组a从0开始赋值,
		而且是赋特定的值,如a[0]是A依次下去,一直有26个; */ 
	}
	cout<<"密码表为:"<<endl;
	for(i=0;i<26;i++)
	{
		cout<<i<<"-------------------"<<a[i]<<'\t';
		//对应的输出密码表,a[0]和A对应依次; 
	}
	cout<<endl;//上面是对密码表的定义; 
	char plain[64],cipher[64];//明文、密文字符串;
	//加密阶段;
	cout<<"\n* * *加密* * *\n"<<endl;
	while(1)
	{
		cout<<"请输入明文(明文需用连续的大写字母):"<<"\n";
		cin>>plain;//输入明文字符串;
		for(i=0;i<strlen(plain);i++)//如果输入的明文字符大于Z或者小于A或加密完了则退出循环;  
		{
			if(plain[i]<'A'||plain[i]>'Z')
			break;
		 } 
		 if(i>=strlen(plain))
		 break;
	 }
	 cout<<"您输入的明文为:"<<plain<<endl;//铭文的输入;
	 int key;
	 cout<<"请您输入您的钥匙(必须是整数):";
	 cin>>key;
	 cout<<"您输入的钥匙为:"<<key<<endl;
	 cout<<"所得的凯撒密码为:";
	 for(i=0;i<strlen(plain);i++)
	 {
	 	int c,j;
	 	c=int(plain[i]);//强制类型转换,将字符转换成整数,即ascII码值;
		j=((c-65)+key)%26;//进行加密;
		cipher[i]=a[j];//将密文进行赋值;赋值的为经过加密后的值;
		//这个加密就是把明文的ascII码值进行运算之后的值赋给另一个数组; 
	 }
	 cipher[i]=0;//最后一个赋值为0,不然会出现乱码;
	 cout<<cipher;//输出密文; 
     cout<<endl;
     //解密阶段;
	 cout<<"\n* * *解密* * *\n "<<endl;
	 cout<<"请输入您的凯撒密码(需用大写连续英文字母):";
	 cin>>cipher;
	 cout<<"您输入的凯撒密码为:"<<cipher<<endl;
	 cout<<"请输入您的钥匙(必须为整数):";
	 cin>>key;
	 cout<<"您输入的钥匙为:"<<key<<endl;
	 cout<<"解密后的明文为:";
	 for(i=0;i<strlen(cipher);i++)
	 {
	 	int c,j;
	 	c=int(cipher[i]);
	 	j=((c-65)-key+26)%26;
	 	plain[i]=a[j];
	 }
	 plain[i]=0;
	 cout<<plain;
	 cout<<endl;
  return 0;
}
	 

凯撒加密的原理就是先输入一串字符串,然后在将输入的字符串转换成ascII码之后进行运算,然后储存起来,最后再将原来的值还原就得到了最初的值,这样就完成了加密的运算。 

猜你喜欢

转载自blog.csdn.net/qq_41404557/article/details/83998954