1

如果有人可以帮助使用 python 中的 XOR 函数,我会很高兴。

例如,我有两个相当大的消息(大约 300 个符号)是用十六进制代码写的,我怎样才能正确地对它们进行异或?我尝试使用通用函数并转换为其他类型,但我无法做到这一点(

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

4

3 回答 3

6

如果我正确地回答了您的问题,如果您有 2 个十六进制数字表示为字符串:

a = "e877a5e68bea88d61b93ac5ee0d562e8e9"
b = "23fe3231699ade23482"

你可以用一些掩码对它们中的任何一个进行异或,方法是转换为 int,并应用按位异或运算符:

xor_result = int(a, 16) ^ int(b, 16)

print '%x' % xor_result

并且,如果您想保留原始格式

string_xor_result = hex(xor_result)[2:]
于 2012-11-10T18:16:19.843 回答
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))
于 2014-04-08T08:37:51.793 回答
1

遍历字符串 chars,然后将每个 char 转换为 int ( int(a,16)),然后应用 xor,用 重新转换为十六进制,用 去除hex前导 '0x' [2:],最后加入所有内容

stra = 'abc'
strb = 'abd'
''.join(hex( int(a,16) ^ int(b,16) )[2:] for a,b in zip(stra, strb))

请注意,正如评论中所指出的,它仅在两个字符串具有相同长度时才有效。否则,较长字符串的某些字符将被忽略。

于 2012-11-10T18:13:44.083 回答