【问题标题】:Simplecrypt: Data to decrypt must be bytesSimplecrypt:要解密的数据必须是字节
【发布时间】:2019-06-21 03:06:34
【问题描述】:

所以,我将加密数据写入 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.


它将其识别为字符串。
如何从文件中读取并将其放入字节类型的变量中?

【问题讨论】:

  • 文本文件“错误”恕我直言。看来您已将bytes 对象的repr() 形式保存到文本文件中,现在正尝试将该表示解析回bytes 对象。我会在文本文件中保存更常见的二进制数据表示,例如 Base64。查看 Python 标准库中的 binascii 模块。

标签: python encryption


【解决方案1】:

问题可能不在数据类型上。您的数据是二进制数据,它可能包含换行符 (\n)。在这种情况下,readline 只能读取到换行符,即只是字符串的一部分。

错误消息指的是这个问题。不幸的是,readline 对于二进制数据并不可靠。您需要将二进制数据编码为字符串(例如使用base64),以便将其保存在文本文件中。

有关工作示例,请参阅:SimpleCrypt Python Error

有关将二进制数据编码为字符串的示例,请参阅:How does one encode and decode a string with Python for use in a URL?

【讨论】:

    【解决方案2】:

    我一直在做的是在保存文件时使用.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]

    【讨论】:

    • 代码示例会很好。目前你的答案似乎很差
    猜你喜欢
    • 2020-04-28
    • 1970-01-01
    • 2018-09-13
    • 1970-01-01
    • 2019-09-30
    • 2012-12-02
    • 2018-07-01
    • 1970-01-01
    相关资源
    最近更新 更多