如何加密字典数据?

How to encrypt dictionary data?

我正在使用 jwcrypto 使用 public 密钥加密数据。我已经阅读了文档并且 JWE class 仅将明文作为有效负载。

但是我有一本字典可以作为有效负载进行加密。

我可以将字典转换为 json 并加密有效载荷,但解密我的数据的人将在解密后期待字典。

有没有办法把字典加密成payload

JWE 定义了一种 JSON 友好的方式来加密任意数据。

所以你想要的(加密映射到 JSON 对象的 python 字典)不是 JWE,而是 JWT 令牌。 JWT 基本上是使用 JWS 和 JWE 标准来签署 and/or 加密 JSON 对象。

只需使用 jwcrypto 文档的 JWT 部分:https://jwcrypto.readthedocs.io/en/latest/jwt.html

应该是这样的:

from jwcrypto.jwt import JWT
from jwcrypto.jwk import JWK
claims = {"my": "claims"} # your claims as a Python dict, that can be JSON-encoded
key = JWK.generate(kty='EC').public() # this generates an EC key, you must replace that with your recipient public key
jwt = JWT(header={"alg": "ECDH-ES+A128KW", "enc": "A256CBC-HS512"}, claims=claims) # set your own alg here according to your needs
jwt.make_encrypted_token(key)
serialized_jwt = token.serialize()

然后反序列化必须使用假设令牌是 JWT 的库来完成,否则你最终会得到 JSON 有效负载的字符串表示,你将不得不将自己解码为 Python 字典.