错误加密Fernet从文件读取令牌

时间:2018-08-30 22:47:09

标签: python cryptography

我创建了密钥,并加密了用户发送的消息,并将此消息存储在文件中,然后在尝试解密文件中的消息后,却收到此错误.... url(r"post_list/",post_list,name ="post_list"), url(r"post_detail/(?P<id>[-\w]+)/$",post_detail,name="post_detail"), 。我不使用时间作为令牌,而且之后也将其转换为字节。

我的代码是:

cryptography.fernet.InvalidToken

1 个答案:

答案 0 :(得分:1)

问题来自于您编写和读取消息的方式以及文件的密钥。实际上,加密的文本和密钥不是strings,而是byte strings,需要用不同的方式对待。

在您的情况下,在读写时足以指定您以 binary模式进行操作,并且可以通过添加 b 标志来进行操作。有关更多详细信息,请参见documentation

此外,在解密中,您还需要从文件中读取密钥。

def encry():

    key = Fernet.generate_key()
    f = Fernet(key)

    what = "example"
    what_b = str.encode(what)
    token = f.encrypt(what_b)

    with open("string.txt", "wb") as f1, open("key.txt", "wb") as f2:
        f1.write(token)
        f2.write(key)


def decry():
    with open("string.txt", "rb") as f1, open("key.txt", "rb") as f2:
        token = f1.read()
        key = f2.read()

    f = Fernet(key)
    what_d = str(f.decrypt(token),'utf-8') #converting back to string

encry()
decry()