逐字节异或文件,以 ASCII 保存输出?
XOR file byte by byte, save output in ASCII?
我想一个字符一个字符地读取一个文件,然后用 172
对每个字节进行 XOR,然后另存为一个新文件。
我做了以下内容:
b = bytearray(open('in.txt', 'rb').read())
for i in range(len(b)):
b[i] ^= 0xAC # XOR byte with 172
open('out.txt', 'wb').write(b)
在示例文本文件上尝试:
ïÃÂËÞÍØÙÀÍØÅÃÂß
我得到了垃圾:
oo/o.o'o2o!o4o5o,o!o4o)o/o.o3
预期的输出是:
Congratulations
手动执行此操作,我得到了预期的输出:
str(chr(0xEF ^ 0xAC)) # 'C', 'ï' XOR 172 = 67, 67 to ASCII is 'C'
str(chr(0xC3 ^ 0xAC)) # 'o'
str(chr(0xC2 ^ 0xAC)) # 'n'
...
但是试图自动化它会产生废话。为什么它不能正常工作,我怎样才能得到我预期的输出?
您的文件 in.txt
没有使用单字节字符编码 Windows-1254 as you expect but perhaps multibyte UTF-8 encoding。
我想一个字符一个字符地读取一个文件,然后用 172
对每个字节进行 XOR,然后另存为一个新文件。
我做了以下内容:
b = bytearray(open('in.txt', 'rb').read())
for i in range(len(b)):
b[i] ^= 0xAC # XOR byte with 172
open('out.txt', 'wb').write(b)
在示例文本文件上尝试:
ïÃÂËÞÍØÙÀÍØÅÃÂß
我得到了垃圾:
oo/o.o'o2o!o4o5o,o!o4o)o/o.o3
预期的输出是:
Congratulations
手动执行此操作,我得到了预期的输出:
str(chr(0xEF ^ 0xAC)) # 'C', 'ï' XOR 172 = 67, 67 to ASCII is 'C'
str(chr(0xC3 ^ 0xAC)) # 'o'
str(chr(0xC2 ^ 0xAC)) # 'n'
...
但是试图自动化它会产生废话。为什么它不能正常工作,我怎样才能得到我预期的输出?
您的文件 in.txt
没有使用单字节字符编码 Windows-1254 as you expect but perhaps multibyte UTF-8 encoding。