c++異或可以加密(最最基礎)
阿新 • • 發佈:2019-01-07
今天看書的時候看到一句:“異或運算的特點是:如果 a^b=c,那麼就有 c^b == a 以及c^a==b。此規律可以用來進
還有一個小問題就是強制轉化那裡,我發現異或以後數字就變成int型了,得強制轉換一下。
行最簡單的快速加密和解密。”
遂打算一試一探究竟。我首先假設有個金鑰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。