使用异或(XOR)运算进行加密解密的原理

什么是异或运算

异或运算是在二进制数中的一种按维进行计算的逻辑运算符。其真值表为:

左操作数 右操作数 结果
0 0 0
0 1 1
1 0 1
1 1 0

加密过程

从上面的真值表中可以看出,我们可以取右操作数(左操作数)当做加密密钥,记为key,取左操作数(右操作数)作为待加密文本,记为message。

  1. 前提:首先得确保通信发送方和通信接收方都存储了相同的key;
  2. 加密:通信发送方将message与key作一次异或运算(message XOR key)后就可以得到一段加密文本(encyptedMessage)。我们就可以通过在网络中传输这段加密文本,就保证了我们的消息在网络传输过程中的安全性,因为如果别有用心的人通过一定手段从网络中截取我们的通信文本,拿到的也只是encyptedMessage,由于没有key,该别有用心的人是无法读懂这段encyptedMessage的;
  3. 解密:通信接收方收到通信发送方的encyptedMessage后,将encyptedMessage与key再次进行异或运算就可以得到通信发送方本来想发送的文本message,从而读懂通信发送方的意图。

为什么异或运算可以用来进行加密

首先,我们可以将加密问题模型化为探究:为什么一个数字message在通过两次与同一数字key进行异或运算后,依然能得到原来的数字message?又因为因为计算机中每个数字都是使用二进制进行存储的,计算机中数与数之间的运算就是二进制位于二进制位的运算。所以我们可以再次对该问题进行简化得到,为什么一位数字b_message与同一位数字b_key进行两次二进制运算将得到原位数字b_message呢?

其次,我们都知道,二进制中每位都只有有限的两种取值可能,我们可以通过分类讨论的方法研究。

  1. 第一次异或运算的结果记为result,且记结果为1,即 result = 1
    1. key为1,由上面的真值表知,message只能取 0,那么message与key的第二次异或运算的结果为:result XOR key = 1 XOR 1 = 0 == message,即message XOR key XOR key==message
    2. key为0,由上面的真值表知,message只能取 1,那么message与key的第二次异或运算的结果为:result XOR key = 1 XOR 0 = 1 == message,即message XOR key XOR key==message
  2. 第一次异或运算的结果记为result,且记结果为1,即 result = 0
    1. key为1,由上面的真值表知,message只能取 1,那么message与key的第二次异或运算的结果为:result XOR key = 0 XOR 1 = 1 == message,即message XOR key XOR key==message
    2. key为0,由上面的真值表知,message只能取 0,那么message与key的第二次异或运算的结果为:result XOR key = 0 XOR 0 = 0 == message,即message XOR key XOR key==message
  3. 所以 message XOR key XOR key==message,即任意位数字b_message与同一位数字b_key进行两次二进制运算将得到原任意位数字b_message,即一个数字message在通过 两次 与同一数字key进行异或运算后,依然能得到原来的数字message

C++程序示例

#include 
#include 
#include 

using namespace std;

/**
	使用异或运算进行加密运算的原理
*/

int main()
{
	srand((unsigned)time(NULL));

	int key = 135; // 二进制为 1000 0111
	// 待加密报文
	int message = rand(); // 随机产生报文

	cout << "待加密的报文为:" << message << endl;
	int encyptedMessage = message ^ key;
	cout << "加密后的报文为:" << encyptedMessage << endl;
	int decryptedMessage = encyptedMessage ^ key;
	cout << "还原后的报文为:" << decryptedMessage << endl;
}

该段程序的运行结果截图为:
程序运行截图

你可能感兴趣的:(算法,安全)