邏輯運算之中,除了 AND 和 OR,還有一種 XOR 運算,中文稱爲"異或運算"。它的定義是:兩個值相同時,返回false,不然返回true。也就是說,XOR能夠用來判斷兩個值是否不一樣。
JavaScript 語言的二進制運算,有一個專門的 XOR 運算符,寫做^。
若是兩個二進制位相同,就返回0,表示false;不然返回1,表示true。加密
XOR 的應用
XOR 運算有一個很奇妙的特色:若是對一個值連續作兩次 XOR,會返回這個值自己。
上面代碼中,原始值是1010,再任意選擇一個值(上例是1111),作兩次 XOR,最後老是會獲得原始值1010。這在數學上是很容易證實的。.net
加密應用
XOR 的這個特色,使得它能夠用於信息的加密。
上面代碼中,原始信息是message,密鑰是key,第一次 XOR 會獲得加密文本cipherText。對方拿到之後,再用key作一次 XOR 運算,就會還原獲得message。blog
完美保密性
二戰期間,各國爲了電報加密,對密碼學進行了大量的研究和實踐,其中就包括 XOR 加密。
戰後,美國數學家香農將他的研究成果公開發表,證實了只要知足兩個條件,XOR 加密是沒法破解的。ip
key的長度大於等於message
key必須是一次性的,且每次都要隨機產生ci
理由很簡單,若是每次的key都是隨機的,那麼產生的CipherText具備全部可能的值,並且是均勻分佈,沒法從CipherText看出message的任何特徵。也就是說,它具備最大的"信息熵",所以徹底不可能破解。這被稱爲 XOR 的"完美保密性"(perfect secrecy)。開發
知足上面兩個條件的key,叫作 one-time pad(縮寫爲OTP),意思是"一次性密碼本",由於之前這樣的key都是印刷成密碼本,每次使用的時候,必須從其中挑選key。數學
其中信息熵能夠按如下通俗的理解class
要理解信息熵,其實並不難,由於生活中無處不是信息熵的體現。好比,假設你是一個僞球迷,對各國家足球隊實力一點都不瞭解,問你冠軍賽兩支隊伍誰可能奪冠。首先通過你腦海的是,這兩家國家隊可能實力至關,用機率學的說法,即兩支球隊奪冠的機率都是50%,那麼結果就像是擲硬幣,正反靠天時地利人和,並沒有從考證——咱們設定這種情景爲A。這個時候,有我的跑過來和你說,他是一個足球評論員,對各足球對很是瞭解,而後告訴你這次冠軍賽實力相差懸殊,德國隊近來年表現優秀,主帥勒夫策略非凡,而另一支隊伍已經有不少屆未進入世界盃總決賽了;基於這些不完整信息,做爲僞球迷的你,心理確定給德國隊奪冠加分,假設這個時候你心理的奪冠機率變成了德國隊80%的奪冠率,而另外一支隊伍只剩20%的奪冠率——咱們設定這種情景爲A+。咱們知道,比賽的結果只有一個,冠軍也只有一支隊伍。結果出來了,有人跑過來準備跟你說到底誰奪冠了,若是你只是在A情境下,這個奪冠信息對你確定頗有誘惑力,由於你原本就沒法判斷誰可能奪冠;若是你是在A+情境下,這個奪冠信息對你來講多少有點失去新鮮,由於世界級的賽事,出差錯的可能性不高,因此你會以爲你其實已經大概知道告終果,聽或不聽沒有太大意義。換種說法表述,晚上冠軍賽開戰,若是你身處情景A,你確定比較好奇,平分秋色的雙方到底誰能奪冠;而若是你身處情景A+,你會以爲這是一場結果已定的賽事,沒有太大興趣。二進制
好的,舉了這麼一個例子,你應該已經開始恍然了,信息會改變你對事物的未知度和好奇心,信息量越大,你對事物越瞭解,進而你對事物的好奇心也會下降,由於你對事物的肯定性越高。至此,爲了抽象這個模型,聰明的香農總結出了信息熵這個概念。信息熵用以表示一個事物的非肯定性,若是該事物的非肯定性越高,你的好奇心越重,該事物的信息熵就越高。咱們先拋出信息熵的公式
詳細瞭解能夠參照 https://blog.csdn.net/wendingzhulu/article/details/42045137密碼