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

來源:互聯網
上載者:User

今天看書的時候看到一句:“異或運算的特點是:如果 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 7char 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。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.