【问题标题】:jwe cannot encrypt data correctly by jwcryptojwe 无法通过 jwcrypto 正确加密数据
【发布时间】:2020-07-03 16:58:55
【问题描述】:

我需要通过 jwe 生成加密数据。 ruby 的实现可以正常工作。但是python实现不能正常工作。

红宝石实现

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 的例子。但是生成的token不正确。

【问题讨论】:

    标签: python jwe jwk jwcrypto


    【解决方案1】:

    已修复。我应该使用 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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-05
      • 1970-01-01
      • 2018-10-19
      • 2018-04-11
      • 2019-04-07
      • 2020-05-11
      • 1970-01-01
      相关资源
      最近更新 更多