使用协议缓冲区序列化字节Python3

问题描述 投票:0回答:1

我正在尝试序列化一个字节对象-这是程序加密的初始化向量。但是,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 google-protocol-buffer
1个回答
0
投票

如果您必须将任意bytes对象强制转换为str,则可以选择以下选项:

  • 只需在对象上调用str()。它将变成repr形式,即。可以解析为bytes文字的内容,例如。 "b'abc\x00\xffabc'"
  • 使用“ latin1”解码。即使数据不是使用Latin-1编码的文本,从技术上讲这毫无意义,这也将始终有效。
  • 使用base64或base85编码(标准库具有一个同时覆盖这两者的base64模块)
© www.soinside.com 2019 - 2024. All rights reserved.