这篇文章介绍 XOR 加密解密及 python 实现方法
XOR运算
XOR
运算,中文称为“异或运算”。
它的定义是:两个值相同时,返回false,否则返回true。也就是说,XOR可以用来判断两个值是否不同。
对应的真值表如下:
XOR 运算有一个很奇妙的特点:如果对一个值连续做两次 XOR,会返回这个值本身。
1
2
3
4
5
// 第一次 XOR
1010 ^ 1111 // 0101
// 第二次 XOR
0101 ^ 1111 // 1010
加密过程
从上面的真值表中可以看出,我们可以取右操作数(左操作数)当做加密密钥,记为key,取左操作数(右操作数)作为待加密文本,记为message。
- 前提:首先得确保通信发送方和通信接收方都存储了相同的key;
- 加密:通信发送方将message与key作一次异或运算(message XOR key)后就可以得到一段加密文本(encyptedMessage)。我们就可以通过在网络中传输这段加密文本,就保证了我们的消息在网络传输过程中的安全性,因为如果别有用心的人通过一定手段从网络中截取我们的通信文本,拿到的也只是encyptedMessage,由于没有key,该别有用心的人是无法读懂这段encyptedMessage的;
- 解密:通信接收方收到通信发送方的encyptedMessage后,将encyptedMessage与key再次进行异或运算就可以得到通信发送方本来想发送的文本message,从而读懂通信发送方的意图。
XOR 加密的python实现
1
2
3
4
5
6
7
8
9
10
11
12
13
14
def xor_crypt_string(data, key='awesomepassword', encode=False, decode=False):
from itertools import izip, cycle
import base64
if decode:
data = base64.decodestring(data)
xored = ''.join(chr(ord(x) ^ ord(y)) for (x,y) in izip(data, cycle(key)))
if encode:
return base64.encodestring(xored).strip()
return xored
secret_data = "239054"
print xor_crypt_string(secret_data, encode=True)
print xor_crypt_string(xor_crypt_string(secret_data, encode=True), decode=True)
注意问题
最关键的KEY不能泄露.
本文网址: https://pylist.com/topic/140.html 转摘请注明来源