python中的xor函数

时间:2012-11-10 17:57:35

标签: python xor

如果有人可以在python中提供XOR功能,我会很高兴。

例如,我有两个非常大的消息(大约300个符号),它们是由十六进制代码写的 我该如何正确地对它们进行异或? 我尝试使用通用函数并转换为其他类型,但我无法做到(

我不知道我需要转换哪种类型的数据?

3 个答案:

答案 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))