1. 程式人生 > >c++異或可以加密(最最基礎)

c++異或可以加密(最最基礎)

今天看書的時候看到一句:“異或運算的特點是:如果 a^b=c,那麼就有 c^b == a 以及c^a==b。此規律可以用來進

行最簡單的快速加密和解密。”

遂打算一試一探究竟。我首先假設有個金鑰key,然後給出number。但是為了加密,讓number^key, 解密的時候再異或一次key又可以重新得到number。所以這個key是多少很關鍵啊。

所以最開始寫了一個

int a,b;
cin>>a>>b;
cout<<a^b;
然後自然是編譯無法通過,後來到處詢問無人理我,自己捉摸捉摸,按位異或按理說是按位來滴,不過int是4位元組,所以不對應。因此換成char []來儲存。(最開始弄錯了,後面有解釋)

下面附上程式碼

#include <iostream>
using namespace std;
#define N 7
char key[]={'a','b','c','d','e','f','g'};
int main() 
{
	char  number[N],encode[N];
	for(int i=0;i<N;++i)
		cin>>number[i];
	for(int i=0;i<N;++i)
		encode[i]=number[i] ^ key[i];//加密
	for(int i=0;i<N;++i)
		cout<<encode[i];
	cout<<endl;
	for(int i=0;i<N;++i)
		cout<< char( encode[i]^key[i]);//解密
 	cout<<endl;
	system("pause");
	return 0;
}

還有一個小問題就是強制轉化那裡,我發現異或以後數字就變成int型了,得強制轉換一下。

這裡糾正一個問題,其實剛才我cout<<a^b;錯誤的原因竟然是因為^的優先性低於<<符號,因為如果加括號即可解決此問題。-_- !

cout<<(a^b);這次真是學到了。。

其實^支援的有long、int、short、unsigned int。