Мне удалось отправить файл с одного компьютера, на котором установлена программа 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