如果有人可以在python中提供XOR功能,我会很高兴。
例如,我有两个非常大的消息(大约300个符号),它们是由十六进制代码写的 我该如何正确地对它们进行异或? 我尝试使用通用函数并转换为其他类型,但我无法做到(我不知道我需要转换哪种类型的数据?
答案 0 :(得分:6)
如果我的问题正确,如果您有2个十六进制数字表示为字符串:
a = "e877a5e68bea88d61b93ac5ee0d562e8e9"
b = "23fe3231699ade23482"
你可以用一些掩码xor,通过转换为int,并应用按位xor运算符:
xor_result = int(a, 16) ^ int(b, 16)
print '%x' % xor_result
并且,如果您想保留原始格式
string_xor_result = hex(xor_result)[2:]
答案 1 :(得分:1)
迭代字符串字符,然后将每个字符转换为int(int(a,16)
),然后应用xor,使用hex
重新转换为十六进制,用[2:]
去除前导'0x',最后加入一切
stra = 'abc'
strb = 'abd'
''.join(hex( int(a,16) ^ int(b,16) )[2:] for a,b in zip(stra, strb))
请注意,正如注释中所指出的,只有当两个字符串具有相同的长度时,它才会起作用。否则,将忽略较长字符串的一些字符。
答案 2 :(得分:1)
如果两个字符串的长度不同,则可以添加一行,循环()
stra = raw_input("msg: ")
strb = raw_input("key: ")
strb = cycle(strb)
print ''.join(hex( int(a,16) ^ int(b,16) )[2:] for a,b in zip(stra, strb))