首页 > 解决方案 > 使用协议缓冲区序列化字节 Python3

问题描述

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

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

代码

错误

string_iv = str(bytes_iv, 'utf-8') UnicodeDecodeError: 'utf-8' codec can't decode byte 0x9b in position 3: invalid start byte

标签: python-3.xutf-8type-conversionencryption-symmetricprotocol-buffers

解决方案


如果您必须将任意bytes对象转换为str,这些是您的选择:

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

推荐阅读