Проблема в том, что я получаю повышение 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