【发布时间】:2013-01-09 16:16:26
【问题描述】:
我正在尝试在 Python 中对两个十六进制字符串进行异或运算,但我真的不知道从哪里开始。
我有两个十六进制字符串:
a = "32510ba9a7b2bba9b8005d43a304b5714cc0bb0c8a34884dd91304b8ad40b62b07df44ba6e9d8a2368e51d04e0e7b207b70b9b8261112bacb6c866a232dfe257527dc29398f5f3251a0d47e503c66e935de81230b59b7afb5f41afa8d661cb"
b = "32510ba9babebbbefd001547a810e67149caee11d945cd7fc81a05e9f85aac650e9052ba6a8cd8257bf14d13e6f0a803b54fde9e77472dbff89d71b57bddef121336cb85ccb8f3315f4b52e301d16e9f52f90"
我应该使用这个吗?
return "".join([chr((x) ^ (y)) for (x,y) in zip(a[:len(b)], b)])return "".join([chr(ord(x) ^ ord(y)) for (x, y) in zip(a[:len(b)], b)])
我不明白上面两个代码的区别。为什么是chr 和ord?我还看到有人使用int(hex,16)。
【问题讨论】:
-
您阅读过
chr和ord的文档吗? -
a[:len(b)]切片是多余的;zip()无论如何都会将结果限制为最短的输入。 -
附带说明,
zip(a[:len(b)], b)与zip(a,b)相同,因为zip在两个可迭代对象中较短的那个结束时停止迭代。 -
@MartijnPieters -- 你赢了 7 秒 ... :) (
try: Learn_Dvorak(); except RuntimeError: Lose_to_Martijn_again()) -
阅读这个问题的答案stackoverflow.com/a/11119660/284795
标签: python cryptography hex ascii xor