1. 程式人生 > >(密碼學)[C++]Caesar加密

(密碼學)[C++]Caesar加密

1.凱撒密碼(Caesar Shift)是一種簡單的移位密碼(The Shift Cipher)

2.一般只對26個字母進行移位

3.對字母A:設移位數(金鑰)為key

若key = 3,則結果為D,

若key = 0,則結果為A,

若key = 25,則結果為Z,

若key = 29,則結果為D。

4.對字母Z:

若key = 3,則結果為C,

若key = 0,則結果為Z,

若key = 25,則結果為Y,

若key = 29,則結果為C。

Caesar C++實現程式碼
#include<iostream>
#include<string>
using namespace std;

//加密
void encrypt(string &s, int key){
	char ch = '\0';
	for(unsigned int i=0;i < s.length();i++){
		if('a' <= s[i] && s[i] <= 'z')
			ch = 'a';
		else
			ch = 'A';
		if('A' <= s[i] && s[i] <= 'Z' || 'a' <= s[i] && s[i] <= 'z')
			s[i] = ch + (s[i] - ch + key) % 26;//實現字母之間的迴圈移位
	}
}
//解密
void decrypt(string &s, int key){
	char ch = '\0';
	for(unsigned int i=0;i < s.length();i++){
		if('a' <= s[i] && s[i] <= 'z')
			ch = 'z';		
		else if('A' <= s[i] && s[i] <= 'Z')
			ch = 'Z';
		if('A' <= s[i] && s[i] <= 'Z' || 'a' <= s[i] && s[i] <= 'z')
			s[i] = ch - (ch - s[i] + key) % 26;<span style="font-family: Arial, Helvetica, sans-serif;">//實現字母之間的迴圈移位</span>
	}
}

int main(){
	string s = "";
	cout<<"請輸入明文:"<<endl;
	getline(cin, s, '\n');
	int key = 0;
	cout<<"請輸入金鑰:";	cin>>key;
	encrypt(s, key);
	cout<<"加密後的密文:"<<s<<endl;
	decrypt(s, key);
	cout<<"解密後的明文:"<<s<<endl;
	
return 0;
}