在python3.6xor中获取简单错误

2024-10-01 09:32:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是python3.6,并尝试使用XOR加密一个文件。我有一个简单的代码:

from itertools import cycle


def xore(data, key):
    return ''.join(chr(a ^ ord(b)) for (a, b) in zip(data, cycle(key)))

with open('C:\\Users\\saeed\\Desktop\\k.png', 'rb') as encry, open('C:\\Users\\saeed\\Desktop\\k_enc.png', 'wb') as decry:
    decry.write(xore(encry.read(), 'anykey'))

我得到了

Traceback (most recent call last):
  File "C:/Users/saeed/IdeaProjects/xorencrypt/XORenc.py", line 8, in <module>
    decry.write(xore(encry.read(), 'anykey'))
TypeError: a bytes-like object is required, not 'str'

这是什么意思,我该怎么解决?还有没有办法解密文件?谢谢。你知道吗


Tags: 文件keyindatapngasopenusers
1条回答
网友
1楼 · 发布于 2024-10-01 09:32:35

Makexore返回字节,而不是str

def xore(data, key):
    return bytes(a ^ ord(b) for a, b in zip(data, cycle(key)))

写入以二进制模式打开的文件对象。你知道吗


顺便说一句,通过传递字节文字b'anykey'而不是字符串文字,您不需要调用ord,因为迭代字节会产生int

def xore(data, key):
    return bytes(a ^ b for a, b in zip(data, cycle(key)))

with open('...', 'rb') as encry, open('...', 'wb') as decry:
    decry.write(xore(encry.read(), b'anykey'))
    #                              ^^^^^^^^^ bytes literal

相关问题 更多 >