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

提前致谢。

您的代码中的问题是您通过将输出重定向到 savePassencrypted 来保存您的通行证并且将其回显到文件中但您忘记了 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