jwe无法通过jwcrypto正确加密数据

2024-05-15 23:40:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要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的例子。但生成的令牌不正确


Tags: keyfromimporttokenjsonreadresultpublic
1条回答
网友
1楼 · 发布于 2024-05-15 23:40:49

固定的。我应该使用compact,而不是手动添加数据

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)

相关问题 更多 >