如果有人可以帮助使用 python 中的 XOR 函数,我会很高兴。
例如,我有两个相当大的消息(大约 300 个符号)是用十六进制代码写的,我怎样才能正确地对它们进行异或?我尝试使用通用函数并转换为其他类型,但我无法做到这一点(
我不知道我需要转换哪种类型的数据?
如果我正确地回答了您的问题,如果您有 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:]
如果两个字符串的长度不同,您可以添加一行,循环()
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))
遍历字符串 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))
请注意,正如评论中所指出的,它仅在两个字符串具有相同长度时才有效。否则,较长字符串的某些字符将被忽略。