TypeError: Object of type bytes is not JSON serializable

Столкнулся с проблемой во время написания школьного проекта. Я не могу отправить зашифрованное сообщение пользователя на сервер. Я использую flask и для обмена с сервером мне необходимо это сообщение "затолкать" в json. Проблема в том, что зашифрованное сообщение представляет собой bytes, которые json сериализовать наотрез отказывается. Декодировать сообщение не представляется возможным. Ошибку и код прилагаю

Код который вызывает ошибку:

    def crypto(self):
        # Генерация ключа RSA
        RSA_key = RSA.generate(2048)

        # Генерация приватного ключа
        pr_key = RSA_key.exportKey(
            passphrase=self.code,
            pkcs=8,
            protection="scryptAndAES128-CBC"
        )

        with open('key.bin', 'wb') as f:
            f.write(pr_key)

        # Генерация публичного ключа с помощью приватного
        pu_key = RSA_key.public_key().exportKey()

        # Отправка публичного ключа на сервер
        response = requests.post(
            'http://127.0.0.1:5000/change_key',
            json={'login': self.sender, 'key': pu_key.hex()}
        )

        if response.status_code != 200:
            msg = QtWidgets.QMessageBox.information(
                self,
                "Ошибка!",
                "Невозможно установить безопасное соединение с сервером"
            )
            return


    def encrypt(self, item, receiver):
        # Получение ключа с сервера
        try:
            self.response = requests.get(
                'http://127.0.0.1:5000/send_key',
                params={'receiver': receiver}
            )
        except:
            msg = QtWidgets.QMessageBox.information(
                self,
                "Ошибка!",
                "Невозможно установить безопасное соединение с сервером"
            )
            return

        # Преобразование str ответа сервера в ключ RSA
        recipient_key = RSA.import_key(bytes.fromhex(self.response.json()['key']), passphrase=self.code)

        # Генерация ключа сессии
        session_key = get_random_bytes(16)

        # Генерация RSA ключа
        cipher_rsa = PKCS1_OAEP.new(recipient_key)

        # Шифровка данных
        item = item.encode('UTF-8')
        cipher_aes = AES.new(session_key, AES.MODE_EAX)
        ciphertext, tag = cipher_aes.encrypt_and_digest(item)

        return [cipher_rsa.encrypt(session_key), cipher_aes.nonce, tag, ciphertext]


    def send_message(self):
        text = self.message.toPlainText()

        if type(self.listWidget.currentItem().text()) == 'NoneType':
            msg = QtWidgets.QMessageBox.information(
                self,
                "Ошибка!",
                "Выберите диалог для отправки"
            )
            return

        self.receiver = self.listWidget.currentItem().text()

        if not text:
            msg = QtWidgets.QMessageBox.information(
                self,
                "Ошибка!",
                "Поле ввода текста не может быть пустым."
            )
            return

        text = self.encrypt(text, self.receiver)
        message = {'sender': self.sender, 'receiver': self.receiver, 'text': text}

        try:
            self.response = requests.post(
                'http://127.0.0.1:5000/send',
                json=message # Строчка в которой возникает ошибка
            )
        except:
            msg = QtWidgets.QMessageBox.information(
                self,
                "Внимание!",
                "Сервер недоступен, попробуйте позднее."
            )
            self.message.repaint()

        if self.response.status_code == 200:
            self.message.setText('')
            self.message.repaint()

Пример отправляемых на сервер данных:

[b'p7\x9dhO\xa6\xc8\x8b;\x1cg\xb4\xd8\x97\x8dz\n;\xb4[t\xca\xbe\xeb\x1b\xc3\xa8\x9bq\x90\xb1\xe9\xba}\xb8Va\x04\xa1\xd3\x0bZ\xdaa\xb9}\x93F\xe9\xecQ\xce\xaa\x9e\xbb\x89\xf0\x06S\xa5\\N[K=\xab\x9a\x92l\xd8\xe6hru]\x0c+x!\x9d\xcc{8\x18Y\x14_g\xcej1\x01\t{b(\xb6\xde-\tE!\
xfc\xef\xbdKSy\xecz/\xba\xaf{\x87\xeb\t=\xb5j\x1e\x00g\xcb\xefL\x8a~~g6\xb7F\x84\rJ\xban\xbd\xdf\x05\xb7\x9b\xa6\xe61F\x14\xc7\xb3e\xd2\xf9B\x91\xf0r\xb8\x9dx\x96\xe9:e\x86\xf1\x9b\xc2c\x85\x9c_\xef\xe8\xcf\x92zt)\x8c-D#"\x08~8\x01\xa5)\x9d\x1a\xef\xca\x1d\xbdM!.\x88\x
e4\x86\xeb\x8cJt\xb0\xed\x93\x955\xb1j\xe1.\x9b\xecw\x16\x16P^\x8eR!\x1a\x8e\xd6"\xdaW\x80\xff\xa1\x01`\x81\xa0\xe8R\x1do\ti\xe7@\xa8\xf4\xbe\xbf\xff\xd4\xf1+>\t', b"8(\x90\xb0\xe6\xf4\x85\xff\x9f'\xbbD\xf8\x0e\x84U", b'n\x93\xf0i\xd0\xb6A\x82 JJ\x17\xb6\x15c3', b'\x02
\x9b\xa4/']

Ошибка:

TypeError: Object of type bytes is not JSON serializable

Ответы (0 шт):