【问题标题】:JWT encrypting payload in python? (JWE)JWT在python中加密有效载荷? (JWE)
【发布时间】:2017-01-02 22:21:48
【问题描述】:

根据RFC 7516,应该可以加密有效载荷/声明,称为 JWE。

是否有任何支持该功能的 python 库?

我检查了 PyJWT、python-jose 和 jwcrypto,但它们都只有使用 HS256 (JWS) 签名的示例。

很抱歉,如果这很明显,但是当涉及到涉及加密的事情时,我会格外谨慎。

【问题讨论】:

    标签: python jwt jwe pyjwt python-jose


    【解决方案1】:

    Jose 和 jwcrypto 库都可以做 JWE。

    对于jose

    claims = {
    'iss': 'http://www.example.com',
    'sub': 42,
    }
    pubKey = {'k':\
               '-----BEGIN PUBLIC KEY-----\n\
    -----END PUBLIC KEY-----'
        }
    # decrypt on the other end using the private key
    privKey = {'k': 
        '-----BEGIN RSA PRIVATE KEY-----\n'+\
    '-----END RSA PRIVATE KEY-----'
    }
    
    encJwt = jose.encrypt(claims, pubKey)
    serJwt = jose.serialize_compact(encJwt)
    decJwt = jose.decrypt(jose.deserialize_compact(serJwt), privKey)
    

    对于jwcrypto

    # algorithm to use
    eprot = {'alg': "RSA-OAEP", 'enc': "A128CBC-HS256"}
    stringPayload = u'attack at dawn'
    E = jwe.JWE(stringPayload, json_encode(eprot))
    E.add_recipient(pubKey)
    encrypted_token = E.serialize(compact=True)
    E = jwe.JWE()
    E.deserialize(encrypted_token, key=privKey)
    decrypted_payload = E.payload
    

    【讨论】:

    • 您/某人能否添加一个完整的示例,将现有的 RSA 密钥导入 jwcrypto?我一直在尝试,但不断出错。
    • jose 库不支持 python 3。请参阅 github.com/Demonware/jose/pull/15 。令人困惑的是,另一个名为 python-jose 的库不支持 JWE。
    • @kilokahn 三年后,但因为我有同样的问题;您可以使用key = jwcrypto.jwk.JWK.from_pem(pemfile.read()),如此处所述:jwcrypto.readthedocs.io/en/stable/jwk.html#examples
    【解决方案2】:

    https://jwcrypto.readthedocs.io/en/latest/jwk.html#examples

    from jwcrypto import jwk
    _k = jwk.JWK.generate(kty='RSA', size=2048)
    _text = _k.export()
    
    import json
    # loading the key back
    _import_key_dict = json.loads(_text)
    key = jwk.JWK(**json.loads(_import_key_dict))
    

    【讨论】:

    • 你把你的模块弄糊涂了;这是 JWK 密钥创建和保存/加载的演示。 JWK 不需要使用 JWE 创建和解密 JWT 加密令牌
    猜你喜欢
    • 2015-11-03
    • 2017-05-17
    • 2020-04-26
    • 1970-01-01
    • 2016-03-12
    • 2022-10-07
    • 2021-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多