Simplecrypt:解密数据必须是字节

0 投票
2 回答
1491 浏览
提问于 2025-04-18 14:25

我写了一些加密的数据到一个txt文件里。
然后我用readline()来读取这一行。
但是我得到的结果是字符串类型的值。

在文本文件中,它看起来是这样的:

`b'sc\x00\x01\x9eU\x86\x8aV\x8f\xa3\x9f\xf4iD\x9bv\xea\x05\x11\xdeo\xd7 \xef\xb1iK\xc1;\xa5\x02\x9fz@\xe4|\x9b^\xe5\xf9e\xc4\xf30\xaa\xe8\xcc>\xf8a\xfa;"\xfb)\xc7z|\xc9\x9c\x1c\x19\xc1}\x15\xdd_\xfd\x90z\x865\xe9O\xef\xd9\t\x06\x9c'`

(b'~~~~~~')

但是,当我在Python中读取这个文本文件并把它放到一个变量里时,它看起来是这样的:

'b\'sc\\x00\\x01\\x9eU\\x86\\x8aV\\x8f\\xa3\\x9f\\xf4iD\\x9bv\\xea\\x05\\x11\\xdeo\\xd7 \\xef\\xb1iK\\xc1;\\xa5\\x02\\x9fz@\\xe4|\\x9b^\\xe5\\xf9e\\xc4\\xf30\\xaa\\xe8\\xcc>\\xf8a\\xfa;"\\xfb)\\xc7z|\\xc9\\x9c\\x1c\\x19\\xc1}\\x15\\xdd_\\xfd\\x90z\\x865\\xe9O\\xef\\xd9\\t\\x06\\x9c\'\n'
('b\'~~~~~~\'\n')



因为这个差异,我收到了一个错误信息:

you cannot use a string because no string encoding will accept all possible characters.


它把这个识别成了字符串。
我该怎么做才能从文件中读取数据并把它放到变量里,变成字节类型呢?

2 个回答

0

我现在的做法是,在保存文件的时候用 .decode(),而在加载文件的时候用 .encode()。这样,文件里的文本就以字符串的形式保存,而打开文件后,我们是以字节的方式来读取它。

补充:

在加密的时候:
with open("encrypted.txt", "w+") as file: file.write(encryptedData.decode())

在解密的时候:
with open("encrypted.txt", "r") as file: encryptedFile = file.readlines() encryptedFile = [line.encode() for line in encryptedFile]

0

问题可能不在于数据类型。你的数据是二进制数据,里面可能包含换行符(\n)。在这种情况下,readline 只会读取到换行符为止,也就是说只读取了字符串的一部分。

错误信息就是在说这个问题。不幸的是,readline 在处理二进制数据时并不可靠。你需要把二进制数据编码成字符串(比如使用 base64),这样才能保存到文本文件里。

想看一个能正常工作的例子,可以参考这个链接:SimpleCrypt Python Error

如果想了解如何把二进制数据编码成字符串,可以查看这个链接:How does one encode and decode a string with Python for use in a URL?

撰写回答