我创建了密钥,并对用户发送的消息进行了加密,并将此消息存储在一个文件中,然后在尝试解密该文件中的消息后,我收到了此错误cryptography.fernet.InvalidToken
。我没有使用令牌的时间,而且我也将其转换为字节后。
我的代码是:
from cryptography.fernet import Fernet
key = Fernet.generate_key()
f = Fernet(key)
def encry():
global f
what = input("What i need to encrypt?")
what_b = str.encode(what)
token = f.encrypt(what_b)
print("key generated")
print("encrypted")
file1=open("string.txt", "w")
file1.write(str(token))
file1.close()
file2=open("key.txt", "w")
file2.write(str(key))
file2.close()
def decry():
global f
print("decrypted")
file1=open("string.txt", "r").read()
file_de=str.encode(file1)
file2=open("de.txt", "w")
what_d = f.decrypt(file_de)
file1.close()
file2.write(str(what_d))
file2.close()
choose = input("Do you want, encrypt or decrypt?" + " " + "(e/d)")
if choose == "e":
encry()
elif choose == "d":
decry()
else:
print("Nothing to do")
发布于 2018-08-31 07:18:21
问题来自于您在文件中写入和读取消息以及密钥的方式。实际上,加密的文本和密钥不是strings
,而是byte strings
,需要以不同的方式处理。
有关更多详细信息,请参阅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()
https://stackoverflow.com/questions/52106332
复制相似问题