比特序列的XOR运算
现代的密码都是建立在计算机的基础之上,这是因为现代的密码所处理的数据量非常大,而且密码算法也非常复杂,不借助计算机的力量就无法完成加密和解密的操作。
计算机的操作对象并不是文字,而是由0和1排列而成的比特序列。无论是文字、图像、声音、视频还是程序,在计算机中都是使用比特序列来表示的。执行加密操作的程序,就是将表示明文的比特序列转换为表示密文的比特序列。
将现实世界中的东西映射为比特序列的操作称为编码。
例如midnight这个单词,我们可以对它的每个字母逐一进行编码,这种编码规则叫做ASCII。
m → 01101101
i → 01101001
d → 01101100
n → 01101110
i → 01101101
g → 01100111
h → 01101000
t → 01110100
注意,这里m -> 01101101这个转换并不是加密而是编码。我们看了0和1的序列与密码没什么两样,但是计算机却可以看懂这些序列,并很快地反应出其所对应的字符串是midnight.
XOR
XOR全称:exclusive or,异或。概念看起来很复杂,实际运算本身一点也不复杂。
1个比特的XOR
1个比特的XOR运算规则如下:
- 0 XOR 0 = 0 (0与0的XOR结果为0)
- 0 XOR 1 = 1 (0与1的XOR结果为1)
- 1 XOR 0 = 1 (1与0的XOR结果为1)
- 1 XOR 1 = 0 (1与1的XOR结果为0)
如果将0理解为偶数,1理解为奇数,就可以将XOR和一般的加法运算等同起来。
- 偶数(0) + 偶数(0) = 偶数(0)
- 偶数(0) + 奇数(1) = 奇数(1)
- 奇数(1) + 偶数(0) = 奇数(1)
- 奇数(1) + 奇数(1) = 偶数(0)
由于XOR和加法运算很相似,因此一般用+和O组合而成 的符号 ⊕ 来表示XOR.
- 0 ⊕ 0 = 0 (0与0的XOR结果为0)
- 0 ⊕ 1 = 1 (0与1的XOR结果为1)
- 1 ⊕ 0 = 1 (1与0的XOR结果为1)
- 1 ⊕ 1 = 0 (1与1的XOR结果为0)
为了更加直观地理解XOR,大家可以想象一下黑白棋中的棋子。
我们将一个棋子保持原状(不反转)看做0,将一个棋子的翻转到另一面看做1,则XOR运算就相当于将黑白棋的一个棋子进行翻转的操作。
- 不翻转(0) ⊕ 不翻转(0) = 不翻转(0)
- 不翻转(0) ⊕ 翻转(1) = 翻转(1)
- 翻转(1) ⊕ 不翻转(0) = 翻转(1)
- 翻转(1) ⊕ 翻转(1) = 不翻转(0)
通过上述场景,我们应该能够理解这样一个规律。即两个相同的数进行XOR运算的结果一定为0,两个不同的数进行XOR运算的结果为1。
比特序列的XOR
前边我们介绍了1个比特之间的XOR运算,而如果是长比特序列之间的XOR运算,则只要将其中每个对应的比特进行XOR运算即可。
假设我们将01001100这个比特序列称为A,将10101010这个比特序列称为B,则A与B的XOR运算可以像下边这样逐一对各个比特进行计算。与加法运算不同的是,XOR运算中不需要进位。
0 1 0 0 1 1 0 0 A
⊕ 1 0 1 0 1 0 1 0 B
1 1 1 0 0 1 1 0 A ⊕ B
由于两个相同 的数进行XOR运算结果一定为0,因此如果将A⊕B的结果再与B进行XOR运算,则结果应该变回A。也就是说,两步运算中B会相互抵消。
1 1 1 0 0 1 1 0 A ⊕ B
⊕ 1 0 1 0 1 0 1 0 B
0 1 0 0 1 1 0 0 A
到这里,我们会发现,上边计算和加解密的步骤非常相似。
- 将明文A用密钥B加密,得到密文A⊕B
- 将密文A⊕B用密钥B解密,得到明文A
实际上,只要选择一个合适的B,仅仅使用XOR就可以实现一个高强度的密码。
本节重点总结一下XOR运算,关于密码相关运算不再赘述,后续内容会逐一进行学习总结。
比特序列的XOR运算相关推荐
- 序列的卷积运算与相关运算——MATLAB
一.实验目的 1.掌握有限长序列线性卷积的编程计算原理,并能够利用Matlab或C语言编写算法程序进行线性卷积运算的程序实现; 2.学会线性卷积函数和线性相关函数的使用方法,并能利用二者进行有限长序列 ...
- php调用mysql加密函数_PHP MySQL应用中使用XOR运算加密算法分享
XOR算法原理 从加密的主要方法看,换位法过于简单,特别是对于数据量少的情况很容易由密文猜出明文,而替换法不失为一种行之有效的简易算法. 从各种替换法运算的特点看,异或运算最适合用于简易加解密运算,这 ...
- 异或(XOR)运算加密/解密在线工具
异或(XOR)运算加密/解密在线工具,工具链接:http://www.atoolbox.net/Tool.php?Id=857 异或(XOR)运算加密一种简单高效.非常安全的加密方法. 异或(XOR) ...
- 异或(XOR)运算加密/解密算法
本文将介绍一个简单易用的加密/解密算法:使用异或(XOR)运算.本算法原理简单,旨在使读者对信息的加密/解密有一个更加直观的印象. XOR算法原理 从加密的主要方法看,换位法过于简单,特别是对于数据量 ...
- c# xor运算_C#程序使用XOR运算符交换数字
c# xor运算 Given two integer numbers and we have to swap them using XOR operator in C#. 给定两个整数,我们必须在C# ...
- python中异或运算_Tensorflow轻松实现XOR运算的方式
对于"XOR"大家应该都不陌生,我们在各种课程中都会遇到,它是一个数学逻辑运算符号,在计算机中表示为"XOR",在数学中表示为" ",学名为 ...
- mysql xor详细_PHP MySQL应用中使用XOR运算加密算法分享
XOR算法原理 从加密的主要方法看,换位法过于简单,特别是对于数据量少的情况很容易由密文猜出明文,而替换法不失为一种行之有效的简易算法. 从各种替换法运算的特点看,异或运算最适合用于简易加解密运算,这 ...
- python中的xor运算
Python的表达式写法与C/C++类似.只是在某些写法有所差别. 主要的算术运算符与C/C++类似.+, -, *, /, //, **, ~, %分别表示加法或者取正.减法或者取负.乘法.除法.整 ...
- 基于Tensorflow轻松实现XOR运算
对于"XOR"大家应该都不陌生,我们在各种课程中都会遇到,它是一个数学逻辑运算符号,在计算机中表示为"XOR",在数学中表示为"",学名为& ...
最新文章
- Windows下配置scrapy需要MVC的14.0版本(转载)
- 最新综述 | 基于深度学习的立体视觉深度估计
- python文件打包成exe可执行文件
- Android中堆unlink利用学习
- 那些很骚很酷很有内涵的话
- 数据中心节能的13个有用小知识
- USACO翻译:USACO 2014 DEC Silver三题
- python 内置模块 subprocess
- 机器学习代码实战——保存和加载模型(Save and Load Model)
- Python+Selenium FAQ
- android 7.0添加菜单,Android 7.0 settings中添加/删除菜单
- 韦东山Linux嵌入式学习——硬件复习
- 《华林科纳-半导体工艺》PVA 刷擦洗
- Linux下使用USB转串口转换器
- 计算机第一次月考试题,计算机基础第一次月考试题.doc
- 【Python处理EXCEL】--pandas导入Excel文件
- 视频文件的原声如何批量更换
- VS2015 密钥 专业版和企业版
- 设备管理器的蓝牙设备卸载了,找不到蓝牙
- involution:比卷积、自注意力机制更好的神经网络新算子