如何在python中正确使用XOR 2字符串?

如何在python中正确使用XOR 2字符串?,python,python-2.7,xor,Python,Python 2.7,Xor,我目前在python中对两个字符串进行异或处理时遇到了问题,因为它返回的是乱七八糟的结果 根据研究,我得出XORing中的方法如下:- def xor_strings(s,t): """xor two strings together""" return "".join(chr(ord(a)^ord(b)) for a,b in zip(s,t)) 因此,我继续对两个字符串进行异或运算,如下所示: c1 = xor_strings('cisco12300000000','466

我目前在python中对两个字符串进行异或处理时遇到了问题,因为它返回的是乱七八糟的结果

根据研究,我得出XORing中的方法如下:-

def xor_strings(s,t):
    """xor two strings together"""
    return "".join(chr(ord(a)^ord(b)) for a,b in zip(s,t))
因此,我继续对两个字符串进行异或运算,如下所示:

c1 = xor_strings('cisco12300000000','46608024c8f48fd0')
print c1
结果字符串返回时出现乱码,如下图所示:

我的XOR操作有什么问题吗

总之,我试图生成一个字符串,类似于使用共享密钥和验证器IV对userpassword进行freeradius哈希


编辑:这不是重复的,因为尝试的解决方案返回乱码,因此问题是,乱码是当您执行XOR时得到的结果。但是,如果将乱码与原始值进行异或运算,则返回原始字符串:

#!python2
def xor_strings(s,t):
    """xor two strings together"""
    return "".join(chr(ord(a)^ord(b)) for a,b in zip(s,t))

c1 = xor_strings('cisco12300000000','46608024c8f48fd0')
print repr(c1) # To see the unprintable bytes as escape codes
c1 = xor_strings(c1,'46608024c8f48fd0')
print c1
输出:

'W_ESW\x01\x00\x07S\x08V\x04\x08VT\x00'
cisco12300000000

我假设,通过查看您编写的代码,您希望对相应的字符(其ASCII值)进行异或运算。 因此,
'abcde','fghijk'
=>
[97,98,99100101],[102103104105106]
是它们的ASCII值。 XORing对应的字符给出
[7,5,11,13,15]

您的代码确实生成了上述数组。如果这是您打算做的,那么您的代码是正确的。是的

你所看到的看起来像“胡言乱语”的原因是:


查看低ord()值的字符列。他们给的角色在你的屏幕上看起来像胡言乱语。例如,上面的数组
[7,5,11,13,15]
给出了
['\x07'、'\x05'、'\x0b'、'\r'、'\x0f']
,打印时给出了看起来像胡言乱语的内容。这同样适用于两个字符串的集合

字符串上XOR的定义是什么?通常,XOR运算只在布尔或二进制数据上有意义。“XOR字符串”是什么意思?你会胡言乱语,因为你所做的是胡言乱语。如果字符串是要“XOR”的某个内容的字符串表示形式,则需要先将该字符串转换为该内容,然后再执行XOR…我该如何执行?转换成二进制?