Расшифровка ключа Fernet, когда у вас есть файл ключа, но вы не знаете, что зашифровано в Python

#python

Вопрос:

Я хотел создать программу, в которой я мог бы сделать некоторое шифрование, затем отправить его другу, а затем отправить ему ключ шифрования и код расшифровки, а затем он мог бы сам расшифровать сообщение. Я только понял, как расшифровать что-то на основе шифрования, это моя попытка:

импорт криптографии

от криптографии.фернет импорт Фернет

ключ = Fernet.generate_key()

печать(ключ)

с открытым(«pass.key», «wb») в качестве файла ключа: файл ключа.запись(ключ)

деф клавиша вызова():

               return open("pass.key", "rb").read()
 

ключ = call_key()

код = «Привет!! Потрясающий код!!».кодировать()

a = Фернет(ключ)

код = a.шифрование(код)

печать(код)

ключ = call_key()

b = Фернет(ключ)

decoded_code = b.расшифровать(код)

печать(декодированный код)

Проблема в том, что для этого должна быть известна зашифрованная часть. я хочу, чтобы его можно было расшифровать, не зная исходного сообщения. Спасибо за вашу помощь:)

Ответ №1:

Я думаю, что на самом деле у тебя есть и то, и другое, чего ты хочешь, просто ты еще не разделил их. Допустим, у вас есть два сценария вместо одного блока кода, который у вас есть.

encrypt.py :

 from cryptography.fernet import Fernet

key = Fernet.generate_key()
print(key)
with open("pass.key", "wb") as key_file: key_file.write(key)
code = "Hello!! Awesome code!!".encode()
a = Fernet(key)
code = a.encrypt(code)
print(code)
 

Который выдает некоторый вывод, где первая строка-это ключ, а вторая строка-закодированное сообщение с сгенерированным вами ключом.

 b'uRcjLwzI3N732Zy02kz35SfFJXgXY3EVKHmSo66xqUg='
b'gAAAAABhXztbKmk_2ALnJSawKjelg2wmn-hdq5dtpIJK0KbveL1pioAJRdNOzuh91acsA0ZFil5VOrSF8oAT4VoV_opezc8BTQMjsV3wkvq78OSEG850pGA='
 

Тогда предположим, что вы передаете байтовую строку своему другу вместе с файлом ключа pass.key . Тогда вы можете узнать, где s находится закодированное сообщение,
decrypt.py :

 from cryptography.fernet import Fernet

s = "gAAAAABhXztbKmk_2ALnJSawKjelg2wmn-hdq5dtpIJK0KbveL1pioAJRdNOzuh91acsA0ZFil5VOrSF8oAT4VoV_opezc8BTQMjsV3wkvq78OSEG850pGA="

code = bytes(s, "utf-8")
def call_key(): return open("pass.key", "rb").read()
key = call_key()
b = Fernet(key)
decoded_code = b.decrypt(code)
print(decoded_code)
 

который производит

 b'Hello!! Awesome code!!'
 

Комментарии:

1. Большое спасибо! Это сработало! Во-первых, этого не произошло, хотя, поскольку я использовал тот же ключ, что и в первой созданной мной программе, программе это не понравилось. Как только я дал ключу новое имя, а следовательно, и новый ключ, он сработал идеально!