【问题标题】:Fernet Cryptography Decrypt giving Invalid TokenFernet Cryptography 解密给出无效的令牌
【发布时间】:2021-09-25 15:05:48
【问题描述】:

我是 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

提前致谢。

【问题讨论】:

    标签: python encryption python-cryptography


    【解决方案1】:

    您的代码中的问题是您通过将输出重定向到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

    【讨论】:

    • 感谢@KMG。我的程序现在正在运行:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-09
    • 2023-02-08
    • 2018-10-20
    • 1970-01-01
    相关资源
    最近更新 更多