Зашифровать файл Python 3.x и отправить по сети другой программе на Python и расшифровать его там? - PullRequest
0 голосов
/ 05 сентября 2018

Мне удалось отправить файл с одного компьютера, на котором установлена ​​программа python, на другой компьютер с одинаковым кодом python на каждом компьютере, используя сокет python. У меня проблема с шифрованием, я не могу найти способ зашифровать файл, отправить его, а затем расшифровать. Я использую fernet для шифрования, но моя программа дешифрования на втором компьютере выдает мне «Raise InvalidSignature» («Подпись не соответствует дайджесту».) cryptography.exceptions.InvalidSignature: Подпись не соответствует дайджесту. ". Так как мне зашифровать что-то, отправить его на другой компьютер и расшифровать?

server.py

from cryptography.fernet import Fernet
import socket

fernet_key = Fernet.generate_key()
f = open('fernet_key.txt', 'w+')
f.write(str(fernet_key.decode()))

def fernet_encryption(message='NoMessagePassedToEncryption'):
    cipher_suite = Fernet(fernet_key)
    cipher_text = cipher_suite.encrypt(message.encode()).decode()
    return cipher_text

def fernet_decryption(message='NoMessagePassedToDecryption'):
    cipher_suite = Fernet(fernet_key)
    decrypted_cipher_msg = cipher_suite.decrypt(message.encode()).decode()
    return decrypted_cipher_msg

print('Server started!')
print('Waiting for clients...')


s = socket.socket()
s.bind(('127.0.0.1', 5555))
s.listen(10)
c, addr = s.accept()

f = open('file.pdf', 'wb')

first = True
file_length = 0
counter = 0

while True:
    msg = c.recv(1024)

    print('Encrypted: ' + str(msg))
    msg = fernet_decryption(msg.decode())
    print('Decrypted: '  + str(msg))

    if first:
        file_length = msg
        first = False
    else:
         if msg == b'':
             break
         else:
             f.write(msg)
             counter += 1

f.close()
c.close()
s.close()

client.py

from cryptography.fernet import Fernet
import socket
import os

get_key = open(os.getcwd() + '/' + 'fernet_key.txt', 'rb')
fernet_key = get_key.read().decode()
get_key.close()


def fernet_encryption(message='NoMessagePassedToEncryption'):
    cipher_suite = Fernet(fernet_key)
    cipher_text = cipher_suite.encrypt(message.encode()).decode()
    return cipher_text

def fernet_decryption(message='NoMessagePassedToDecryption'):
    cipher_suite = Fernet(fernet_key)
    decrypted_cipher_msg = cipher_suite.decrypt(message.encode()).decode()
    return decrypted_cipher_msg

if os.path.exists(file_dir):
length = os.path.getsize(file_dir)

n_pac = (length / 1024)
print('n_pac: ' + str(n_pac))

length = fernet_encryption(length)

s.send(length.encode())
print(length)

with open(file_dir, 'rb') as infile:
    data = infile.read(1024)
    print(data)
    data = fernet_encryption(data)
    print('Encrypted: ' + str(data))

    data = data.encode()

    while data:
        s.send(data)
        data = infile.read(1024)

s.close()
f.close()

, что приводит к этой ошибке на сервере

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