详解XOR(异或)运算加密

逻辑运算之中,除了 AND 和 OR,还有一种 XOR 运算,中文称为"异或运算"。它的定义是:两个值相同时,返回false,不然返回true。也就是说,XOR能够用来判断两个值是否不一样。
详解XOR 运算加密
详解XOR 运算加密
JavaScript 语言的二进制运算,有一个专门的 XOR 运算符,写做^。
详解XOR 运算加密
若是两个二进制位相同,就返回0,表示false;不然返回1,表示true。加密

XOR 的应用
XOR 运算有一个很奇妙的特色:若是对一个值连续作两次 XOR,会返回这个值自己。
详解XOR 运算加密
上面代码中,原始值是1010,再任意选择一个值(上例是1111),作两次 XOR,最后老是会获得原始值1010。这在数学上是很容易证实的。.net

加密应用
XOR 的这个特色,使得它能够用于信息的加密。
详解XOR 运算加密
上面代码中,原始信息是message,密钥是key,第一次 XOR 会获得加密文本cipherText。对方拿到之后,再用key作一次 XOR 运算,就会还原获得message。
详解XOR 运算加密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密码