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