【问题标题】:Python 3 CBC fail because of double backslash bytePython 3 CBC 由于双反斜杠字节而失败
【发布时间】:2020-10-13 15:16:43
【问题描述】:

我正在尝试读回文件中的密文,例如 \t"\x87]\xb6^,\xa7G\xf7\x99<\xb2-\x06\xc8 但是当我将其设置为用于 CBC 解密的字节数组时,我得到 b'\\t"\\x87]\\xb6^,\\xa7G\\xf7\\x99<\\xb2-\\x06\\xc8' 最终失败,因为这不是 CBC 的 16 字节倍数解密。我曾尝试使用 unicode 转义进行解码,但它不会将其数据类型保留为字节。我似乎无法弄清楚如何让它再次正常解密?

谢谢。

【问题讨论】:

  • 当您在字节对象上调用str() 时会发生这种情况(也隐含地,例如在print() 调用中)。它不容易恢复,您应该首先防止这种转换发生。
  • 我修好了。在文件的 open() 语句中使用“b”修饰符有效,并且绕过每个 bytearray() 调用。

标签: python-3.x unicode byte aes cbc-mode


【解决方案1】:

对于所有遇到此问题的人:

如果您将密文写入包含 \ 的文件,而不是将其作为字符串读取并转换为字节(这会添加额外的 \ 转义字符),请在 open() 语句中使用“b”修饰符。

示例:使用 open("test.txt","rb") - 注意 b?这意味着文件中的所有内容都会自动读取为一个字节。不要编写或处理字符串。直接写入和读取字节,然后您的加密/解密功能现在将起作用。没有额外的\。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-24
    • 1970-01-01
    • 2017-05-18
    • 2010-12-14
    • 2016-01-20
    • 1970-01-01
    • 2012-06-16
    相关资源
    最近更新 更多