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

什么是异或运算

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

左操作数右操作数结果
000
011
101
110

加密过程

从上面的真值表中可以看出,我们可以取右操作数(左操作数)当做加密密钥,记为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 <iostream>
#include <stdlib.h>
#include <time.h>

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;
}

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

  • 6
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
AES(Advanced Encryption Standard)加密是一种对称加密算法,也是目前应用非常广泛的加密算法之一。它采用分组加密方式,将明文分为固定长度的数据块,并通过多轮的加密运算进行加密。其核心运算包括字节替换、行移位、列混淆和轮密钥加等步骤,通过多轮运算来实现高强度的加密。 相比之下,异或加密是一种简单的位运算异或运算是指对两个二进制数相同位置的位进行比较,若位相同则结果为0,若位不同则结果为1。异或加密是通过将明文与密钥进行异或运算得到密文的一种加密方式。由于异或运算具有逆运算的性质,所以可以通过再一次对密文与密钥进行异或运算,得到原始的明文。 相比而言,AES加密更加安全可靠。AES加密采用复杂的运算过程和密钥扩展机制,其安全性经过广泛的验证和应用。而异或加密相对简单,容易受到频率分析等攻击手段的威胁。异或加密的安全性依赖于密钥的安全性,对密钥的管理和保护要求较高。 因此,在实际应用中,为了保证数据的安全性,一般更倾向于选择使用AES加密。不过,异或加密在一些特殊情况下也可作为一种简单加密方式来使用,如在一些简单的防护算法、校验算法和简易数据加密等场景中。但需要注意的是,异或加密的安全性相对较低,不适用于对抗一些高级攻击手段的场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值