異或加密算法


異或加密是一種很簡單的加密算法,無論是原理還是操作性上,都不具備任何難度,所以,在做一些簡單的加密時,被廣為采用。

但因為很簡答,破解起來也很容易,所以對於更加私密的信息,不要用這種方法加密。

下面我們簡單地介紹一下異或的運算:

數學運算符為XOR(exclusive OR),在計算機中通常用"^"的符號表示(在英文模式下,按住shift鍵+鍵盤上方的數字6)

在二進制中:

1 XOR 0=1

0 XOR 1=1

1 XOR 1=0

0 XOR 0=0

可以看出若兩個數相同取0,不同取1。

例:

運算11001 ^ 01011=10010

用其他進制表示的數做異或運算時,則應先將他們化為二進制的數,再做運算。(不足的位在前邊填0補齊)

例:

計算6^3=110^011=101

*******************************************************

異或運算具有可逆性。

即:若a^b=c,則有b^c=a (a,b,c分別表示0或1)

利用前面的異或運算規則,我們就其中之一分析:

1 XOR 0=1        則     0 XOR 1=1

原理:根據異或的運算規則,相同為0,不同為1;

若兩個數a,b相同,a=b,則用任意一個數與0做異或時,即得到這個數本身,也就是另一個數;

應用 1 XOR 0 = 1  ,  0 XOR 0= 0 這兩個運算規則(相當於取這個數)。

若兩個數a,b不同,a=~b,則用任意一個數與1做異或時,即得到這個數的相反,也就是另一個數

應用 1 XOR 1 = 0  ,  0 XOR 1 = 1 這兩個運算規則(相當於對這個數取反)。  

**********************************************************

我們不妨對異或的可逆性進行推廣,對任意的兩串二進制數做異或,得到的結果,再與其中任意一串二進制數做異或,得到另一串二進制數。

即a^b=c , 則 b^c=a.(a,b,c分別表示一串二進制數)

與上面的公式形式上是相同的。 

那么,若a是想要加密的信息,則有一密鑰b,對a和b做異或,得到的c就是加密后的信息,可進行傳輸。

得到c后,只需要再 與b做異或,即可得到原信息a。

若應用到字符串上,則字符串上每一個字符都表示一串二進制數。

例:

#include <stdio.h>
main()
{
   char a[]="Password";        //要加密的密碼
   char b[]="encryption";     //密鑰
   int i;
   //加密代碼
   for(i=0;a[i];i++)
     a[i]=a[i]^b[i];
   printf("Your Password is encrypted: %s\n",a);
   /*解密代碼*/
   for(i=0;a[i];i++)
      a[i]=a[i]^b[i];
   printf("You Password: %s\n",a);
  
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM