凱撒加密演算法

遠飛夢發表於2018-11-12
#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碼之後進行運算,然後儲存起來,最後再將原來的值還原就得到了最初的值,這樣就完成了加密的運算。 

相關文章