Как зашифровать данные словаря? - PullRequest
1 голос
/ 25 октября 2019

Я использую jwcrypto для шифрования данных с помощью открытого ключа. Я просмотрел документацию, и класс JWE принимает только открытый текст в качестве полезной нагрузки.

Но у меня есть словарь для шифрования в качестве полезной нагрузки.

Я могу преобразовать словарь в json и зашифровать полезную нагрузку, но тот, кто расшифровывает мои данные, будет ожидать словарь после расшифровки.

В любом случае я могу зашифровать словарь как полезную нагрузку.

1 Ответ

2 голосов
/ 25 октября 2019

JWE определяет JSON-дружественный способ шифрования произвольных данных.

Итак, что вы хотите (зашифровать словарь python, который сопоставляется с объектом JSON), это не JWE, а фактически маркер JWT. JWT в основном использует стандарты JWS и JWE для подписи и / или шифрования объекта JSON.

Просто используйте часть JWT в jwcrypto doc: 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 dict.

...