pyList

用python 实现XOR 加密解密的方法

这篇文章介绍 XOR 加密解密及 python 实现方法

XOR运算

XOR运算,中文称为“异或运算”。

它的定义是:两个值相同时,返回false,否则返回true。也就是说,XOR可以用来判断两个值是否不同。

对应的真值表如下:

XOR运算真值表

XOR 运算有一个很奇妙的特点:如果对一个值连续做两次 XOR,会返回这个值本身。

// 第一次 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实现

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不能泄露.

本文标签: XOR python 解密 加密 方法
本文网址: https://pylist.com/t/1487732894 (转载注明出处)
如果你有任何建议或疑问可以在下面 留言
发表第一条评论!
验证码图片
相关推荐