【问题标题】:Using Protocol Buffer to Serialize Bytes Python3使用协议缓冲区序列化字节 Python3
【发布时间】:2019-10-07 16:58:26
【问题描述】:

我正在尝试序列化一个字节对象 - 这是我的程序加密的初始化向量。但是,Google 协议缓冲区只接受字符串。似乎错误从将字节转换为字符串开始。我是否使用正确的方法来做到这一点?感谢您的任何帮助或指导!

或者,我可以将初始化向量作为 AES-CBC 模式加密的字符串对象吗?

代码

  • 将字节转换为字符串
    • string_iv = str(bytes_iv, 'utf-8')
  • 使用 SerializeToString() 对字符串进行序列化:
    • serialized_iv = IV.SerializeToString()
  • 使用 ParseToString() 恢复字符串:
    • IV.ParseFromString( serialized_iv )
  • 最后,UTF-8 将字符串编码回字节:
    • bytes_iv = bytes(IV.string_iv, encoding= 'utf-8')

错误

string_iv = str(bytes_iv, 'utf-8') UnicodeDecodeError:“utf-8”编解码器无法解码位置 3 中的字节 0x9b:无效起始字节

【问题讨论】:

    标签: python-3.x utf-8 type-conversion encryption-symmetric protocol-buffers


    【解决方案1】:

    如果您必须将任意bytes 对象转换为str,您可以选择以下方法:

    • 只需在对象上调用str()。它将把它变成repr 形式,即。可以被解析为 bytes 文字的东西,例如。 "b'abc\x00\xffabc'"
    • 用“latin1”解码。这将始终有效,即使如果数据不是用 Latin-1 编码的文本从技术上讲是没有意义的。
    • 使用 base64 或 base85 编码(标准库有一个 base64 模块,涵盖两者)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-15
      • 2011-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-26
      • 1970-01-01
      相关资源
      最近更新 更多