Задать вопрос
Gafarchik
@Gafarchik
123

Ошибка TypeError: output must be a bytearray or a writeable memoryview?

Я передаю потоковую запись звука с микрофона в реальном времени с помощью PyAudio и сокета. Шифрую поток и передаю его клиенту. Когда клиент пытается расшифровать поток, я получаю ошибку о неправильном типе данных:
data = cipher.decrypt(data,AES.block_size)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/lib/python3.11/site-packages/Crypto/Cipher/_mode_cbc.py", line 234, in decrypt
    raise TypeError("output must be a bytearray or a writeable memoryview")
TypeError: output must be a bytearray or a writeable memoryview


Это мой код
Клиента:
cipher = AES.new(self.__aes_key,AES.MODE_CBC,iv=self.__iv_data)
while self.__running:
    data = bytearray(connection.recv(self.__frame_chunk))
    data = unpad(cipher.decrypt(data,AES.block_size))
    self.__stream.write(data)


сервера

self.__sending_socket.send(self.__cipher.encrypt(pad(self.__stream.read(self.__frame_chunk),AES.block_size)))


Отправка проходит хорошо, проблема только расшифровать

Я попробовал использовать необходимые типы данных
  • Вопрос задан
  • 118 просмотров
Подписаться 1 Простой 3 комментария
Пригласить эксперта
Ответы на вопрос 1
Hivemaster
@Hivemaster
Админ, который хочет программировать
У метода decrypt второй параметр - это буфер для записи. Подозреваю, что аргумент AES.block_size должен относится к функции unpad.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы