使用Python在密码管理器中掌握密码



我创建了一个基于终端的密码管理器,在其中我们输入主密码,然后我们可以选择添加新密码或查看现有密码。我在cryptography.fernet的帮助下创建了它。

我唯一的问题是,当第一次输入主密码时,我们有fernet密钥,但下一次当我们输入错误的密码时,它实际上是有效的,只有当我们输入正确的密码时才有效,我们第一次输入的密码与密钥相匹配,但它也适用于错误的密码。我能得到一些帮助吗?

from cryptography.fernet import Fernet
from pickle import TRUE
def load_key():
file = open('key.key', 'rb')
key = file.read()
file.close()
return key
master_pwd = input("Enter your master pass : ")
key = load_key() + master_pwd.encode()
fer = Fernet(key)
#Functions
'''
def write_key():
key = Fernet.generate_key()
with open('key.key', 'wb') as key_file:
key_file.write(key)
write_key()'''
def add():
name = input("Enter the site name: ")
url = input("Enter the site URL: ")
email = input("Enter the email: ")
pwd = input("Enter the Password: ")
with open('passwords.txt', 'a') as f:
f.write("Name: " + name + " | " + "URL: " + url + " | " "Email: " + email + " | " + fer.encrypt(pwd.encode()).decode() + "n")
def view():
with open('passwords.txt', 'r') as f:
for line in f.readlines():
data = line.rstrip()
name, url, email, pwd = data.split("|")
print(name, "|", url, "|", email, "|", "Password:", fer.decrypt(pwd.encode()).decode())

while True:
print("1. Add a new Password: ")
print("2. View existing Passwords: ")
print("Enter q to quit: " "n")
mode = input()
if mode == "q":
print("Come Back Again :)")
break
if mode == "1":
add()
elif mode == "2":
view()
else:
print("Invalid mode")
break

这是因为Fernet(key)忽略了附加到Fernet.generate_key()结果的额外字节。如果它实现得很好,它应该抛出一个异常。

请参阅文档末尾的"使用Fernet密码"部分。

顺便说一下,与PyCryptodome等其他API相比,"加密"在某种程度上是一种固执己见的API。

最新更新