Cryptography.fernet.InvalidToken при отправке зашифрованного сообщения по сети - PullRequest
1 голос
/ 02 июля 2019

Я пытаюсь отправить зашифрованную строку по локальной сети, используя сокет и библиотеку cryptography.fernet, но при получении байтов выдает ошибку «cryptography.fernet.InvalidToken». Это работает, если я шифрую и дешифрую в одном файле, но не в том случае, если я размещаю сервер и клиента локально или на 2 разных компьютерах.

Сервер

    import socket
    from cryptography.fernet import Fernet
    crypt = Fernet('sqcyNL5kz2mxWb1KL2QSZWY-GCERE-scEgWBbvq9CCk=')
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
        s.bind((host, port))
        s.listen(10)
        conn, addr = s.accept()
        with conn:
            while True:
                messageEncrypt = conn.recv(2048)
                message = crypt.decrypt(messageEncrypt, None).decode()
                print(message)

Клиент

    import socket
    from cryptography.fernet import Fernet
    crypt = Fernet('sqcyNL5kz2mxWb1KL2QSZWY-GCERE-scEgWBbvq9CCk=')
    message = 'sentence'
    messageEncode = message.encode()
    messageEncrypt = crypt.encrypt(messageEncode)
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
        s.connect((host, port))
        s.sendall(messageEncrypt)
        s.close()

Клиент кодирует, шифрует, затем отправляет сообщение, а клиент получает сообщение и расшифровывает его. Сервер правильно расшифровывает и распечатывает сообщение, но сразу вылетает, не позволяя остальной части программы работать. Странно то, что у него достаточно времени для печати после дешифрования до его сбоя. У кого-нибудь есть идеи, почему это может происходить?

Консоль для сервера:

sentence
Traceback (most recent call last):
  File "E:/Google Drive/School/###/###/python/project/morseSrv.py", line 50, in <module>
message = crypt.decrypt(messageEncrypt).decode()
  File "C:\Python\lib\site-packages\cryptography\fernet.py", line 74, in decrypt
timestamp, data = Fernet._get_unverified_token_data(token)
  File "C:\Python\lib\site-packages\cryptography\fernet.py", line 92, in _get_unverified_token_data
raise InvalidToken
cryptography.fernet.InvalidToken

Process finished with exit code 1

1 Ответ

0 голосов
/ 02 июля 2019

Проблема была вызвана циклом True на сервере. Когда он получал данные, он снова проходил через цикл, но не ждал новых данных. Я изменил его, чтобы выйти из цикла после обработки сообщения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...