如何使用 fernet 作为烧瓶服务解密字符串?

How to decrypt a string with fernet as a flask service?

我正在制作一个简单的烧瓶 api,它正在对即将到来的字符串进行编码和解码。我的编码没有问题,但解码时出现 InvalidToken 错误。我试过了但无法做到。代码:

from flask import Flask,jsonify,request
from cryptography.fernet import Fernet

app = Flask(__name__)
key = Fernet.generate_key()
fernet = Fernet(key)
@app.route('/decode',methods = ["POST"])
def decode():
    response = {'encoded_text': request.json['encoded_text']}
    text = response['encoded_text']
    print(text)
    decryptedbytes = fernet.decrypt(text)
    decryptedstr = decryptedbytes.decode('utf-8')
    return decryptedstr


if __name__ == '__main__':
    app.run(debug=True)

给出:TypeError:令牌必须是字节。

您正在传递 fernet.decrypt 一个 str 而不是 bytes 对象。

您的加密数据在 JSON 中是如何编码的?通常是 base64:

import base64
decryptedbytes = fernet.decrypt(base64.b64decode(text))

记住JSON不支持任意字节。

附带说明一下,每次程序启动时都会为 fernet 算法生成一个密钥,这意味着如果您的服务器重新启动,所有数据都会消失。