如何理解“异或(XOR)”运算在计算机科学中的重要性?(转自-阿里聚安全)...
XOR加密是一种简单高效、非常安全的加密方法
一、 XOR 运算
逻辑运算之中,除了 AND 和 OR,还有一种 XOR 运算,中文称为"异或运算"。
它的定义是:两个值相同时,返回false,否则返回true。也就是说,XOR可以用来判断两个值是否不同。
true XOR true // false
false XOR false // false
true XOR false // true
true XOR false // true
JavaScript 语言的二进制运算,有一个专门的 XOR 运算符,写作^。
1 ^ 1 // 0
0 ^ 0 // 0
1 ^ 0 // 1
0 ^ 1 // 1
上面代码中,如果两个二进制位相同,就返回0,表示false;否则返回1,表示true。
二、 XOR 的应用
XOR 运算有一个很奇妙的特点:如果对一个值连续做两次 XOR,会返回这个值本身。
// 第一次 XOR
1010 ^ 1111 // 0101// 第二次 XOR
0101 ^ 1111 // 1010
上面代码中,原始值是1010,再任意选择一个值(上例是1111),做两次 XOR,最后总是会得到原始值1010。这在数学上是很容易证明的。
三、加密应用
XOR 的这个特点,使得它可以用于信息的加密。
message XOR key // cipherText
cipherText XOR key // message
上面代码中,原始信息是message,密钥是key,第一次 XOR 会得到加密文本cipherText。对方拿到以后,再用key做一次 XOR 运算,就会还原得到message。
四、完美保密性
二战期间,各国为了电报加密,对密码学进行了大量的研究和实践,其中就包括 XOR 加密。
战后,美国数学家香农(Claude Shannon)将他的研究成果公开发表,证明了只要满足两个条件,XOR 加密是无法破解的。
key的长度大于等于message key必须是一次性的,且每次都要随机产生
理由很简单,如果每次的key都是随机的,那么产生的CipherText具有所有可能的值,而且是均匀分布,无法从CipherText看出message的任何特征。也就是说,它具有最大的"信息熵",因此完全不可能破解。这被称为 XOR 的"完美保密性"(perfect secrecy)。
满足上面两个条件的key,叫做 one-time pad(缩写为OTP),意思是"一次性密码本",因为以前这样的key都是印刷成密码本,每次使用的时候,必须从其中挑选key。
五、实例:哈希加密
下面的例子使用 XOR,对用户的登陆密码进行加密。实际运行效果看这里。
第一步,用户设置登陆密码的时候,算出这个密码的哈希,这里使用的是 MD5 算法,也可以采用其他哈希算法。
const message = md5(password);
第二步,生成一个随机的 key。
// 生成一个随机整数,范围是 [min, max]
function getRandomInt(min, max) {return Math.floor(Math.random() * (max - min + 1)) + min;
}// 生成一个随机的十六进制的值,在 0 ~ f 之间
function getHex() {let n = 0;for (let i = 4; i > 0; i--) {n = (getRandomInt(0, 1) << (i - 1)) + n;}return n.toString(16);
}// 生成一个32位的十六进制值,用作一次性 Key
function getOTP() {const arr = [];for (let i = 0; i < 32; i++) {arr.push(getHex());}return arr.join('');
}
上面代码中,生成的key是32位的十六进制值,对应 MD5 产生的128位的二进制哈希。
第三步,进行 XOR 运算,求出加密后的message。
function getXOR(message, key) {const arr = [];for (let i = 0; i < 32; i++) {const m = parseInt(message.substr(i, 1), 16);const k = parseInt(key.substr(i, 1), 16);arr.push((m ^ k).toString(16));}return arr.join('');
}
使用这种方法保存用户的登陆密码,即使加密文本泄露,只要一次性的密钥(key)没有泄露,对方也无法破解。
转载于:https://www.cnblogs.com/cat520/p/9328005.html
如何理解“异或(XOR)”运算在计算机科学中的重要性?(转自-阿里聚安全)...相关推荐
- 如何理解「异或(XOR)」运算在计算机科学中的重要性
前言 在学逻辑学的时候,基本的逻辑运算是非.与.或,且并没有得到特别的强调,而且事实上异或可以由这三个逻辑运算符表出.可是在计算机领域,异或似乎处于与非.与.或并列的关系,例如 C 语言的位运算符中就 ...
- 异或(XOR)运算加密/解密在线工具
异或(XOR)运算加密/解密在线工具,工具链接:http://www.atoolbox.net/Tool.php?Id=857 异或(XOR)运算加密一种简单高效.非常安全的加密方法. 异或(XOR) ...
- 异或(XOR)运算加密/解密算法
本文将介绍一个简单易用的加密/解密算法:使用异或(XOR)运算.本算法原理简单,旨在使读者对信息的加密/解密有一个更加直观的印象. XOR算法原理 从加密的主要方法看,换位法过于简单,特别是对于数据量 ...
- 【ShareCode】不错的技术文章 -- 如何使用异或(XOR)运算找到数组中缺失的数?...
如何使用异或(XOR)运算找到数组中缺失的数? 今天给大家分享一篇关于使用XOR(异或)运算找到数组中缺失的数的问题. 在一次Javascript面试中,有这么一个问题: 假设有一个由0到99(包含9 ...
- python numpy 实现与(and),非与(not),或(or),异或(xor)逻辑运算!
python numpy 实现与(and),非与(not),或(or),异或(xor)逻辑运算!- 目录 1,与,非,或,异或简单的介绍 2,python numpy实现 3,运行结果 1,与,非,或 ...
- 数学在计算机科学中的作用,计算机科学中数学的重要性及其运用
摘 要:数学是计算机科学中不可忽视的重要内容,其为计算机科学的形成与发展奠定了基础.阐述了数学模型.离散数学.组合数学及数论在计算机科学中的应用,为计算机编程.模型建设.数据存储等方面提供了理论 ...
- python中异或运算_Tensorflow轻松实现XOR运算的方式
对于"XOR"大家应该都不陌生,我们在各种课程中都会遇到,它是一个数学逻辑运算符号,在计算机中表示为"XOR",在数学中表示为" ",学名为 ...
- 比特序列的XOR运算
现代的密码都是建立在计算机的基础之上,这是因为现代的密码所处理的数据量非常大,而且密码算法也非常复杂,不借助计算机的力量就无法完成加密和解密的操作. 计算机的操作对象并不是文字,而是由0和1排列而成的 ...
- 基于Tensorflow轻松实现XOR运算
对于"XOR"大家应该都不陌生,我们在各种课程中都会遇到,它是一个数学逻辑运算符号,在计算机中表示为"XOR",在数学中表示为"",学名为& ...
最新文章
- 人工智能能否跨越意识鸿沟?
- poj2456 Aggressive cows(二分查找)
- abap 给用户分配事物代码权限_【第五篇】SAP ABAP7.50 之用户接口
- Angulary应用依赖里的platform-browser
- ts可展开注释_Nike控告WL的始末,和它被TS带货后的几近成名
- python enumeration_python模块之enum_上
- 打印python包含汉字报SyntaxError: Non-ASCII character '\xe4' in file
- Android逆向笔记-使用Android Studio调试Smali代码(方式二)
- android小程序_小程序踩坑记
- python中的*和**参数:nn.Sequential(*layers)
- 在MacOS和iOS系统中使用OpenCV
- vscode插件之Vetur
- Vegas安装出现问题怎么办?
- C语言多线程基础-01-线程的创建与销毁
- 慢查询日志分析工具mysqldumpslow
- Unity3D 一些工具总结
- t分布 u分布 卡方分布_t分布, 卡方x分布,F分布
- 全国计算机大学排名2019最新排名,2019全国大学最新排名 中国最好大学排行榜
- 微信公众平台开发(34)微相册
- 【神经网络】变分自编码大杂烩