Ошибка cryptography.fernet.InvalidToken при расшифровке строки из файла (с использованием ключа из файла)Python

Программы на Python
Anonymous
Ошибка cryptography.fernet.InvalidToken при расшифровке строки из файла (с использованием ключа из файла)

Сообщение Anonymous »

Я все еще новичок и создаю простой менеджер паролей на Python с использованием модуля шифрования. Пользователь может ввести имя программы и пароль, они шифруются, а затем записываются в файл. Они также могут просматривать пароли, добавленные в файл. Когда пользователь выбирает это, он вводит имя программы/службы, которую пытается найти, и он возвращает соответствующий пароль, расшифровывая файл построчно и проверяя, есть ли имя программы в этом файле. Надеюсь, это имеет смысл.
Проблема в том, что я получаю повышение InvalidToken cryptography.fernet.InvalidToken, когда программа пытается расшифровать строки из файла после выбора " view» и ввода имени, даже если файл не пуст. Я действительно не понимаю, почему, поскольку ключ не генерируется в программе, он хранится в файле, поэтому при каждом запуске программы считывается один и тот же ключ. Я уже читаю файл в байтах, а не в строках. У меня также есть еще одна более простая программа, которая использует тот же файл и может успешно шифровать и расшифровывать файл, поэтому у меня такое чувство, что я допустил ошибку где-то еще.
Вот моя программа ( ошибка возникает в строке 58):

Код: Выделить всё

from cryptography.fernet import Fernet

#Get key from file
filekey = open("filekey.key", "rb")
key = filekey.read()
fernet = Fernet(key)
filekey.close()

cmd = "" #Force entry to loop

#Run until user quits
while cmd != "quit":
cmd = input("[add | view | quit] ")

#Input validation loop
while cmd not in ["add", "view", "quit"]:
print("Not a valid command. Try again.")
cmd = input("[add | view | quit]")

#Run if user enters "add"
if cmd == "add":

#Get user input for name and password
name = input("Enter name: ")
pwd = input("Enter password: ")

#Concatenate and encode input
new_line = name + " " + pwd
byte_new_line = new_line.encode()

#Encrypt and convert to string
enc_line = fernet.encrypt(byte_new_line)
enc_line_str = str(enc_line)

#Write string to file
outfile = open("passwords.data", "a")
outfile.write(enc_line_str)
outfile.close()

#Run if user enters "view"
if cmd == "view":
found = False #Keep track of whether name is present in file

#Get user input for name to find
search = input("Name to search for: ")

#Open file to search from
infile = open("passwords.data", "rb")
line = infile.readline()

#Read each line of file
while line != "":
line = infile.readline()

#Decrypt line and convert to string
line_dec = fernet.decrypt(line) #Error here
line_dec_str = str(line_dec)

#Get index of name in decoded string
index = line_dec_str.find(name)

#Run if name is found in string
if index != -1:

#Change found to True and print string
found = True
print(line_dec_str)

#Display error if name not found
if found == False:
print("Error: name not found in file. Try again.")

infile.close()
Будем благодарны за любую помощь ☺️

Подробнее здесь: https://stackoverflow.com/questions/787 ... -using-key

Вернуться в «Python»