【发布时间】:2016-01-23 09:13:30
【问题描述】:
我有两个文件msg.log 和key.log,其中第一个文件包含纯文本Hello World!,key.log 包含一个十六进制字符串95274DE03C78B0BDEDFBEB0D,我想在这两个文件之间进行按位异或文件,但第一个文件 msg.log 需要先转换为 ASCII。
我有这个代码:
#!/usr/bin/python3
def main():
with open ("msg.log", "r") as myfile1:
a=myfile1.read()
with open ("key.log", "r") as myfile2:
b=myfile2.read()
rr=convert_to_ascii(a)
xored = xor_strings(a, b)
print(xored)
def convert_to_ascii(text):
return "".join(format(ord(char),"x") for char in text)
def xor_strings(xs, ys):
return "".join(format(ord(x)^y) for x, y in zip(xs, ys))
if __name__ == "__main__": main()
我得到int 和str 不能异或的错误,我尝试使用int(y,base=16) 函数但它改变了值,而我只想改变类型而不是转换基数中的值。有什么解决办法?
【问题讨论】:
-
我不知道您为什么认为
int(y, base=16)会更改这些值? gist.github.com/NotTheEconomist/0e2966c9b67cb372e00c -
从 xor 的结果我知道它已经改变了它的值
-
@JohnSmith 这没有意义......粗略的异或改变了一个值......
-
我的意思是 xor 的结果不是我手动执行时得到的结果,所以唯一可能出错的部分是
key的转换