Почему моя программа криптографии python не работает? - PullRequest
0 голосов
/ 12 июля 2020

Я пытаюсь написать программу для шифрования и дешифрования сообщений. Вот трассировка: Traceback (последний вызов последним): файл «C: \ Users \ notelling \ OneDrive \ Desktop \ pyprojects \ crypto.py», строка 15, в f = Fe rnet (key) NameError: имя 'ключ' не определено

Вот мой код:

from cryptography.fernet import Fernet
import os
if os.path.isfile("encryption.key"):
    file = open("encryption.key", "rb")
    filec = file.read().decode()
else:
    key = Fernet.generate_key()
    file = open('encryption.key', 'wb')
    file.write(key.encode()) # The key is type bytes still
    file.close()
    print("Key generated.")
mode = input("Please enter mode (e/d):")
if mode == 'e':
    message = input("What is your message to encrypt?").encode()
    f = Fernet(key)
    encrypted = f.encrypt(message)
    passkey = open("encryptedmsg.txt", "wb")
    passkey.write(encrypted)
    passkey.close()
elif mode == 'd':
    passread = open("encryptedmsg.txt", "rb")
    contents = passread.read()
    f = Fernet(key)
    decrypted = f.decrypt(encrypted).decode()
    print("Decrypted message is ", decrypted)
input()

1 Ответ

0 голосов
/ 12 июля 2020

Это не связано с криптографией, это чистая Python специфика c ошибка.

Переменный ключ назначается в первом блоке else, номер строки. 7.

Эта переменная не будет доступна за пределами этого блока, если не определено специально.

Дополнительные ссылки:

https://docs.python.org/3.8/tutorial/classes.html#class -and-instance-variables

https://docs.python.org/3.8/tutorial/classes.html#private -переменные

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