я пытаюсь сделать приложение шифрования-дешифрования, и я получаю эту ошибку, я не могу найти проблему - PullRequest
0 голосов
/ 04 марта 2020
from cryptography.fernet import Fernet
import base64
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC
import os

password_to_encrypt = "mnwzJkdUUzUKmo8j8c3IG7MtfyIyRjkRJKxGQXX6VwQ="


def get_directories():
    global key_file, message_encrypted, message_decrypted, encrypted_message_key, decrypted_message_key
    path = 'C:/Users/ilias/PycharmProjects/virus-thing/idk'

    files = []
    # r=root, d=directories, f = files
    for r, d, f in os.walk(path):
        for file in f:
            if '.txt' in file:
                files.append(os.path.join(r, file))

    for f in files:
        if "key.txt" in f:
            key_file = f
            print(key_file)
        elif "message_encrypted.txt" in f:
            message_encrypted = str(f)
            print(message_encrypted)
        elif "message_decrypted.txt" in f:
            message_decrypted = str(f)
            print(message_decrypted)
        elif "encrypted_message_key.txt" in f:
            encrypted_message_key = str(f)
            print(encrypted_message_key)
        elif "decrypted_message_key.txt" in f:
            decrypted_message_key = str(f)
            print(decrypted_message_key)


def generate_key_password():
    global key_file, message_encrypted, message_decrypted, encrypted_message_key, decrypted_message_key
    password_provided = password_to_encrypt
    password = password_provided.encode()
    salt = b'salt_'
    kdf = PBKDF2HMAC(
        algorithm=hashes.SHA256(),
        length=32,
        salt=salt,
        iterations=100000,
        backend=default_backend()
    )
    key = base64.urlsafe_b64encode(kdf.derive(password))
    print(f"generate key password: {key}")
    file = open(key_file, "wb")
    file.write(key)
    file.close()


def generate_key_random():
    global key_file, message_encrypted, message_decrypted, encrypted_message_key, decrypted_message_key
    key = Fernet.generate_key()
    file = open(key_file, "wb")
    file.write(key)
    file.close()


def encrypt(data):
    global key_file, message_encrypted, message_decrypted, encrypted_message_key, decrypted_message_key
    file = open(key_file, "rb")
    key = file.read()
    file.close()
    message = str(data)
    encoded = message.encode()
    f = Fernet(key)
    encrypted = f.encrypt(encoded)
    file2 = open(message_encrypted, "wb")
    file2.write(encrypted)
    file2.close()


def decrypt():
    global key_file, message_encrypted, message_decrypted, encrypted_message_key, decrypted_message_key
    file = open(message_encrypted, "rb")
    message = file.read()
    file.close()
    file = open(key_file, "rb")
    key = file.read()
    file.close()
    f = Fernet(key)
    decrypted = f.decrypt(message)
    original_message = decrypted.decode()
    file = open(message_decrypted, "w")
    file.write(original_message)
    file.close()


def encrypt_key():
    global key_file, message_encrypted, message_decrypted, encrypted_message_key, decrypted_message_key
    global encrypted_key
    file1 = open(key_file, "rb")
    random_key = file1.read()
    print(f"random_key: {random_key}")
    file1.close()
    generate_key_password()
    encrypt(random_key)
    file2 = open(message_encrypted, "rb")
    encrypted_key = file2.read()
    print(f"encrypted_key: {encrypted_key}")
    file2.close()


def encrypt_mk():
    get_directories()
    global key_file, message_encrypted, message_decrypted, encrypted_message_key, decrypted_message_key
    global encrypted_key
    generate_key_random()
    encrypt(input("data: "))
    file1 = open(message_encrypted, "rb")
    message = file1.read()
    print(f"message: {message}")
    file1.close()
    encrypt_key()
    file2 = open(encrypted_message_key, "w")
    encrypted_key = str(encrypted_key)
    file2.write(f"encrypted_message: {message}\nencrypted_key: {encrypted_key}")
    file2.close()
    clear_files()


def decrypt_mk():
    get_directories()
    global key_file, message_encrypted, message_decrypted, encrypted_message_key, decrypted_message_key
    generate_key_password()
    file1 = open(encrypted_message_key, "r")
    line1 = file1.readline()
    line2 = file1.readline()
    file1.close()
    line1 = line1.split("'")
    line2 = line2.split("'")
    encrypted_message = line1[1]
    encrypted_key = line2[1]
    file2 = open(message_encrypted, "w")
    file2.write(encrypted_key)
    file2.close()
    decrypt()
    file3 = open(message_decrypted, "r")
    read_file = file3.read()
    read_file = read_file.split("'")
    decrypted_key = read_file[1]
    file3.close()
    file4 = open(key_file, "w")
    file4.write(decrypted_key)
    file4.close()
    file5 = open(message_encrypted, "w")
    file5.write(encrypted_message)
    file5.close()
    decrypt()
    file6 = open(message_decrypted, "r")
    decrypted_message = file6.read()
    file6.close()
    file7 = open(decrypted_message_key, "w")
    file7.write(f"decrypted message: {decrypted_message}\ndecrypted key: {decrypted_key}")
    file7.close()
    clear_files()


def clear_files():
    get_directories()
    global key_file, message_encrypted, message_decrypted, encrypted_message_key, decrypted_message_key
    file1 = open(message_encrypted, "w")
    file1.write(" ")
    file1.close()
    file2 = open(message_decrypted, "w")
    file2.write(" ")
    file2.close()
    file3 = open(key_file, "w")
    file3.write(" ")
    file3.close()

, поэтому при запуске encrypt_mk () выводится:

Traceback (последний вызов был последним): файл "C: \ Users \ ilias \ PycharmProjects \ virus-thing \ main. py ", строка 181, в файле encrypt_mk ()" C: \ Users \ ilias \ PycharmProjects \ virus-thing \ main.py ", строка 123, в файле encrypt_mk2 = open (encrypted_message_key," w ")

NameError: имя 'encrypted_message_key' не определено

Я не могу понять почему, потому что я четко установил его во фракции get_directories () Кто-нибудь знает, что происходит?

1 Ответ

1 голос
/ 04 марта 2020

In

for f in files:
        if "key.txt" in f:
            key_file = f
            print(key_file)
        elif "message_encrypted.txt" in f:
            message_encrypted = str(f)
            print(message_encrypted)
        elif "message_decrypted.txt" in f:
            message_decrypted = str(f)
            print(message_decrypted)
        elif "encrypted_message_key.txt" in f:
            encrypted_message_key = str(f)
            print(encrypted_message_key)
        elif "decrypted_message_key.txt" in f:
            decrypted_message_key = str(f)
            print(decrypted_message_key)

Если у вас есть encrypted_message_key.txt в f, у вас также есть key.txt в f. Потому что key.txt является частью encrypted_message_key.txt.
Так что вы никогда не сможете go к ветви elif "encrypted_message_key.txt" in f:. То же самое касается elif "decrypted_message_key.txt" in f:.
Может быть, вам следует сначала проверить encrypted_message_key.txt.

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