如何对 python 中的 2 个字符串进行异或运算?
How to XOR 2 strings proper in python?
我目前在 python 中对两个字符串进行 XOR 操作时遇到问题,结果是 return 乱码结果。
根据研究我推导出XORing中的方法如下:-
def xor_strings(s,t):
"""xor two strings together"""
return "".join(chr(ord(a)^ord(b)) for a,b in zip(s,t))
所以我继续对两个字符串进行 XOR,如下所示:
c1 = xor_strings('cisco12300000000','46608024c8f48fd0')
print c1
生成的字符串返回时出现乱码,如下图所示:
我的 XOR 操作有问题吗?
总而言之,我正在尝试使用共享密钥和身份验证器 IV 生成类似于用户密码的 freeradius 散列的字符串
编辑:这不是重复的尝试解决方案return 乱码因此问题
异或时得到的是乱码。但是,如果您将乱码与原始值异或,您将得到原始字符串:
#!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,99,100,101],[102,103,104,105,106]
是它们的 ASCII 值。
异或对应的字符给出 [7, 5, 11, 13, 15]
您的代码确实生成了上述数组。如果这是您打算执行的操作,那么您的代码是正确的。是的。
你看到的看起来像 'gibberish' 的原因是:
查看低 ord() 值的字符列。他们给出的字符在您的屏幕上看起来像乱码。例如,上面的数组 [7, 5, 11, 13, 15]
给出 ['\x07', '\x05', '\x0b', '\r', '\x0f']
,打印时给出看起来像乱码的内容。同样适用于您的两个字符串集。
我目前在 python 中对两个字符串进行 XOR 操作时遇到问题,结果是 return 乱码结果。
根据研究我推导出XORing中的方法如下:-
def xor_strings(s,t):
"""xor two strings together"""
return "".join(chr(ord(a)^ord(b)) for a,b in zip(s,t))
所以我继续对两个字符串进行 XOR,如下所示:
c1 = xor_strings('cisco12300000000','46608024c8f48fd0')
print c1
生成的字符串返回时出现乱码,如下图所示:
我的 XOR 操作有问题吗?
总而言之,我正在尝试使用共享密钥和身份验证器 IV 生成类似于用户密码的 freeradius 散列的字符串
编辑:这不是重复的尝试解决方案return 乱码因此问题
异或时得到的是乱码。但是,如果您将乱码与原始值异或,您将得到原始字符串:
#!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,99,100,101],[102,103,104,105,106]
是它们的 ASCII 值。
异或对应的字符给出 [7, 5, 11, 13, 15]
您的代码确实生成了上述数组。如果这是您打算执行的操作,那么您的代码是正确的。是的。
你看到的看起来像 'gibberish' 的原因是:
查看低 ord() 值的字符列。他们给出的字符在您的屏幕上看起来像乱码。例如,上面的数组 [7, 5, 11, 13, 15]
给出 ['\x07', '\x05', '\x0b', '\r', '\x0f']
,打印时给出看起来像乱码的内容。同样适用于您的两个字符串集。