Использование буфера протокола для сериализации байтов Python3 - PullRequest
0 голосов
/ 07 октября 2019

Я пытаюсь сериализовать байтовый объект - вектор инициализации для шифрования моей программы. Но буфер протокола 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» не может декодировать байт 0x9b в позиции 3: недопустимый начальный байт

1 Ответ

0 голосов
/ 07 октября 2019

Если вы должны привести произвольный bytes объект к str, это ваш вариант:

  • просто вызовите str() объекта. Он превратит его в repr форму, т.е. что-то, что может быть проанализировано как литерал bytes, например. "b'abc\x00\xffabc'"
  • расшифровывается с "latin1". Это всегда будет работать, даже если технически это не имеет смысла, если данные не являются текстами, закодированными с помощью Latin-1.
  • использует кодирование base64 или base85 (стандартная библиотека имеет модуль base64, который охватывает оба)
...