Fernet 加密解密给出无效令牌
Fernet Cryptography Decrypt giving Invalid Token
我是 python 的新手。我正在制作一个基本的密码管理器。它只是将密码作为加密字符串存储在文件中(纯文本文件,但扩展名是乱码,因此您无法双击打开它;使用.mpf)。
这是我的代码,但是当我 运行 readPass() 函数时,在解密阶段,它给了我这个错误。
Traceback (most recent call last):
File "D:\Data\TECH\Code\_0_School\python\passman\func.py", line 65, in <module>
readPass()
File "D:\Data\TECH\Code\_0_School\python\passman\func.py", line 63, in readPass
decrypted = fernet.decrypt(fileCon)
File "D:\Programs\Python\lib\site-packages\cryptography\fernet.py", line 75, in decrypt
timestamp, data = Fernet._get_unverified_token_data(token)
File "D:\Programs\Python\lib\site-packages\cryptography\fernet.py", line 101, in _get_unverified_token_data
raise InvalidToken
cryptography.fernet.InvalidToken
这是我在 Github 上的代码:
https://github.com/AaravHattangadi/python-projects/blob/master/passman/func.py
提前致谢。
您的代码中的问题是您通过将输出重定向到 savePass
即 encrypted
来保存您的通行证并且将其回显到文件中但您忘记了 encrypted
是一个字节对象,它会导致最终文件在末尾有一个额外的字母b
,所以你需要在保存文件时删除这个额外的b
。所以用这个版本替换你的保存功能
def savePass():
key = loadKey()
fernet = Fernet(key)
print('Enter Name of Password:')
name = input()
print("Enter password")
Pass = input()
passEncoded = Pass.encode()
encrypted = fernet.encrypt(passEncoded)
with open(name + '.mpf', 'wb') as f:
f.write(encrypted)
这将跳过第一个字节,即 b'This is bytes'
中的字母 b
我是 python 的新手。我正在制作一个基本的密码管理器。它只是将密码作为加密字符串存储在文件中(纯文本文件,但扩展名是乱码,因此您无法双击打开它;使用.mpf)。
这是我的代码,但是当我 运行 readPass() 函数时,在解密阶段,它给了我这个错误。
Traceback (most recent call last):
File "D:\Data\TECH\Code\_0_School\python\passman\func.py", line 65, in <module>
readPass()
File "D:\Data\TECH\Code\_0_School\python\passman\func.py", line 63, in readPass
decrypted = fernet.decrypt(fileCon)
File "D:\Programs\Python\lib\site-packages\cryptography\fernet.py", line 75, in decrypt
timestamp, data = Fernet._get_unverified_token_data(token)
File "D:\Programs\Python\lib\site-packages\cryptography\fernet.py", line 101, in _get_unverified_token_data
raise InvalidToken
cryptography.fernet.InvalidToken
这是我在 Github 上的代码: https://github.com/AaravHattangadi/python-projects/blob/master/passman/func.py
提前致谢。
您的代码中的问题是您通过将输出重定向到 savePass
即 encrypted
来保存您的通行证并且将其回显到文件中但您忘记了 encrypted
是一个字节对象,它会导致最终文件在末尾有一个额外的字母b
,所以你需要在保存文件时删除这个额外的b
。所以用这个版本替换你的保存功能
def savePass():
key = loadKey()
fernet = Fernet(key)
print('Enter Name of Password:')
name = input()
print("Enter password")
Pass = input()
passEncoded = Pass.encode()
encrypted = fernet.encrypt(passEncoded)
with open(name + '.mpf', 'wb') as f:
f.write(encrypted)
这将跳过第一个字节,即 b'This is bytes'
b