[英]How to XOR a hex string with a literal string in Python?
我的最终目标是使用线性同余生成器加密/解密带有十六进制字符串的字符串。
我有一个要与字符串异或的“键”列表。 例如,键列表是['0x92', '0xe3', 0x18'...]
而我想与键异或的字符串是'apple'
。 键列表的长度与字符串的长度相同。
我希望能够产生诸如"\\xF3\\x93\\x68..."
。
我不确定如何开始这种方法。 我应该将字符串中的每个字符都转换为二进制并将每个十六进制字符串转换为二进制并将它们异或在一起吗?
我正在寻找的结果 (xF3..) 是 unicode 吗?
鉴于keys
的长度等于text
的长度,可以简单地使用zip
并使用join
来生成字符串:
keys = ['\x92', '\xe3', '\x18']
text = 'app'
result = ''.join(chr(ord(key)^ord(tex)) for key,tex in zip(keys,text))
代码的工作原理如下: zip
在keys
和text
发出元素的元组:所以zip(keys,text)
的结果大致是:
list(zip(keys,text)) == [('\x92', 'a'), ('ã', 'p'), ('\x18', 'p')]
现在我们将每个元组的key
和tex
统一起来,所以在第一次迭代中, key
是'\\x92'
, tex
是'a'
。 通过对这些元素调用ord(..)
,我们获得了 ASCII 码。 接下来,我们对这些 ASCII 代码执行 XOR ( ^
) 操作并将其转换回相应的char(..)
。 我们使用''.join(..)
将所有这些字符连接在一起成为结果字符串,即:
result == 'ó\x93h'
使用ord
和chr
>>> a = 0x22
>>> a
34
>>> b = ord('Z')
>>> b
90
>>> a^b
120
>>> chr(a^b)
'x'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.