jwe не может правильно зашифровать данные с помощью jwcrypto - PullRequest
0 голосов
/ 23 марта 2020

У меня есть требование генерировать зашифрованные данные с помощью jwe. Реализация ruby может работать правильно. Но реализация python не может работать правильно.

Реализация ruby

require 'jwe'

key =  OpenSSL::PKey::RSA.new File.read 'public.pem'
payload = {user:"admin"}.to_json
puts JWE.encrypt(payload, key, enc: 'A192GCM')

Реализация python

from jwt import jwk_from_pem
from jwcrypto import jwe,jwk
from jwcrypto.common import json_encode
import json

with open("public.pem", "rb") as f:
    key = jwk.JWK.from_pem(f.read())
key = key.public()
token = jwe.JWE(u'{user:"admin"}', json_encode({"alg":"RSA-OAEP","enc":"A192GCM"}))
token.add_recipient(key)
result = token.serialize()
result = json.loads(result)
print(result["protected"] + "." + result["encrypted_key"])

Я привел примеры jwcrypto. Но сгенерированный токен неверен.

1 Ответ

0 голосов
/ 23 марта 2020

исправлена. Я должен использовать компакт вместо добавления данных вручную.

from jwt import jwk_from_pem
from jwcrypto import jwe,jwk
from jwcrypto.common import json_encode

with open("public.pem", "rb") as f:
    key = jwk.JWK.from_pem(f.read())
key = key.public()
token = jwe.JWE('{"user":"admin"}', json_encode({"alg":"RSA-OAEP","enc":"A192GCM"}))
token.add_recipient(key)
result = token.serialize(compact=True)
print(result)
...