首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从文件读取Fernet标记时出错

从文件读取Fernet标记时出错
EN

Stack Overflow用户
提问于 2018-08-31 06:47:09
回答 1查看 2.2K关注 0票数 2

我创建了密钥,并对用户发送的消息进行了加密,并将此消息存储在一个文件中,然后在尝试解密该文件中的消息后,我收到了此错误cryptography.fernet.InvalidToken。我没有使用令牌的时间,而且我也将其转换为字节后。

我的代码是:

代码语言:javascript
复制
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")
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-31 07:18:21

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

有关更多详细信息,请参阅documentation

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

代码语言:javascript
复制
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()
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52106332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档