我试图加密用户输入的信息,然后将其保存在JSON文件中的字典格式。然后,在代码的后面,我试图搜索JSON文件中的用户指定的密钥,并解密和显示值。我已经创建了2个函数来完成这一任务。
第一个:
#function to encrypt user-entered password before dumping it into a JSON file
def encryptAndDump(username, password):
e_password = password.encode('utf-8')
encrypted = k.encrypt(e_password)
b64_encrypted = base64.b64encode(encrypted).decode('utf-8')
a = {site: [username, b64_encrypted]}
with open(dictionary, 'r') as f:
password_dictionary = json.load(f)
password_dictionary = {}
password_dictionary.update(a)
with open(dictionary, 'w') as f:
json.dump(password_dictionary, f)
在encryptAndDump函数中,函数外部定义的变量(“username”和“password”)是用户输入变量。
第二个:
#function to search JSON file and decrypt password information
def searchAndDecrypt():
r_site = input("Enter the Site Name to retrieve your credentials (Password Manager is case sensitive.): ")
with open(dictionary, 'r') as f:
password_dictionary = json.load(f) if f.readable() else {}
for site, user_pass in password_dictionary.items():
if site == r_site:
print("ACCOUNT FOUND")
while True:
c_password = pwinput.pwinput("Confirm your Password Manager password to decrypt login credentials: ")
if c_password == m_password:
b64_encrypted_password = user_pass[1]
encrypted_password = base64.b64decode(b64_encrypted_password)
decrypt_user_pass = k.decrypt(encrypted_password).decode('utf-8')
print(decrypt_user_pass)
break
else:
print("Invalid password.")
break
else:
print("Site Account not found.")
对于函数searchAndDecrypt,函数外部定义的变量是(站点-用户输入并保存在JSON文件中)(m_password =“Str@wb3rry!”)
我最初在代码中内置了一个错误消息,说明数据无法加密,但是在这里的一些人的建议下,我已经删除了它,看看出现的错误代码是什么。它只是响应我运行第二个函数。
File "/Users/makaylagalbraith/Documents/Python/PasswordManager.py", line 157, in <module>
searchAndDecrypt()
File "/Users/makaylagalbraith/Documents/Python/PasswordManager.py", line 91, in searchAndDecrypt
decrypt_user_pass = k.decrypt(encrypted_password).decode('utf-8')
File "/Users/makaylagalbraith/Library/Python/3.9/lib/python/site-packages/cryptography/fernet.py", line 90, in decrypt
return self._decrypt_data(data, timestamp, time_info)
File "/Users/makaylagalbraith/Library/Python/3.9/lib/python/site-packages/cryptography/fernet.py", line 151, in _decrypt_data
self._verify_signature(data)
File "/Users/makaylagalbraith/Library/Python/3.9/lib/python/site-packages/cryptography/fernet.py", line 135, in _verify_signature
raise InvalidToken
cryptography.fernet.InvalidToken
我的密码被保存在代码的前面,像这样
这就是我创建密码/密钥的方式
key = Fernet.generate_key()
with open("key.key", "wb") as key_file:
key_file.write(key)
k=Fernet(key)
它可能是关于我如何生成/保存它的东西吗?
任何帮助将不胜感激!
1条答案
按热度按时间5m1hhzi41#
我运行了你的代码,去掉了一些我不需要的东西,让它运行,它对我来说工作得很好。也许你没有正确地传递密码,或者它在解密之前发生了变化?
请注意,我将
site
更改为一个名为'site'
的字符串,并注解掉pwinput内容并添加了一些新参数。