JWT在python中加密有效载荷? (JWE)
Posted
技术标签:
【中文标题】JWT在python中加密有效载荷? (JWE)【英文标题】:JWT encrypting payload in python? (JWE) 【发布时间】:2017-01-02 22:21:48 【问题描述】:根据RFC 7516,应该可以加密有效载荷/声明,称为 JWE。
是否有任何支持该功能的 python 库?
我检查了 PyJWT、python-jose 和 jwcrypto,但它们都只有使用 HS256
(JWS) 签名的示例。
很抱歉,如果这很明显,但是当涉及到涉及加密的事情时,我会格外谨慎。
【问题讨论】:
【参考方案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 加密令牌。以上是关于JWT在python中加密有效载荷? (JWE)的主要内容,如果未能解决你的问题,请参考以下文章
如何解密JWT,在java中,当加密的令牌以String的形式存在时,用JWE加密?
验证使用 JSON Web 加密 (JWE) 加密的安全令牌的颁发者?