1. 程式人生 > 其它 >異或運算加密

異或運算加密

邏輯運算之中,除了 AND 和 OR,還有一種 XOR 運算,中文稱為"異或運算"。它的定義是:兩個值相同時,返回false,否則返回true。也就是說,XOR可以用來判斷兩個值是否不同。


JavaScript 語言的二進位制運算,有一個專門的 XOR 運算子,寫作^。

如果兩個二進位制位相同,就返回0,表示false;否則返回1,表示true。

XOR 的應用
XOR 運算有一個很奇妙的特點:如果對一個值連續做兩次 XOR,會返回這個值本身。

上面程式碼中,原始值是1010,再任意選擇一個值(上例是1111),做兩次 XOR,最後總是會得到原始值1010。這在數學上是很容易證明的。

加密應用
XOR 的這個特點,使得它可以用於資訊的加密。

上面程式碼中,原始資訊是message,金鑰是key,第一次 XOR 會得到加密文字cipherText。對方拿到以後,再用key做一次 XOR 運算,就會還原得到message。

完美保密性
二戰期間,各國為了電報加密,對密碼學進行了大量的研究和實踐,其中就包括 XOR 加密。
戰後,美國數學家夏農將他的研究成果公開發表,證明了只要滿足兩個條件,XOR 加密是無法破解的。

key的長度大於等於message
key必須是一次性的,且每次都要隨機產生

理由很簡單,如果每次的key都是隨機的,那麼產生的CipherText具有所有可能的值,而且是均勻分佈,無法從CipherText看出message的任何特徵。也就是說,它具有最大的"資訊熵",因此完全不可能破解。這被稱為 XOR 的"完美保密性"(perfect secrecy)。

滿足上面兩個條件的key,叫做 one-time pad(縮寫為OTP),意思是"一次性密碼本",因為以前這樣的key都是印刷成密碼本,每次使用的時候,必須從其中挑選key。