我使用jose
进行pythonjwe加密。你知道吗
下面是示例中的代码
import jose
from time import time
from Crypto.PublicKey import RSA
key = RSA.generate(2048)
claims = {'name': 'Jack'}
pub_jwk = {'k': key.publickey().exportKey('PEM')}
jwe = jose.encrypt(claims, pub_jwk)
jwt = jose.serialize_compact(jwe)
这里jwt的值是binary string
b'eyJlbmMiOiAiQTEyOENCQy1IUzI1NiIsICJhbGciOiAiUlNBLU9BRVAiLCAiX192IjogMn0.N1RFIEaRIGxCgSkT8HhQI4bO66XOL2RVfn4tMu8BBfGBO79AFKzHUYIRuVqpBX9YcUrsn66n3ccH5O2HO-CuCEPZ6EBM47IBUW1NAdFnm4uc3_X3EAngGTe2hnkLp0RzByYUcaLp2bMn7TWptRmvDGrADaI3uliZCV_ahLeWWFySFjIm_LaLBUzH1okZ-uPqvKQRXDEsdmBSTH5KlsQZHOdRa6uZz_iILmZY6Pp-9XtOSldTLiGasIA_9DNfljP5UtImOhAax_piA7hHeacGAtBNZJVZCWZZajLI6HKz5hVs4aZy7I2EIK6ogL0ubBNMeCQ0dZ70SWjvBTcTbtV2jw.65XaQ1rCSIn25Gc73CJe0g.oo81kAasMwPTISH5XEnnY5Mym3PPXMVs-FtYwgboHUE.5TR5Au7A7JYU7x0iYoPhGQ'
当我用相同的jwt
值解密时,它会给出准确的结果。你知道吗
enc = jose.decrypt(jose.deserialize_compact(jwt), priv_jwk)
在这里,当我试图使json
的加密值
data = {'jwt': jwt}
json.dumps(data)
它给了我错误Object of type 'bytes' is not JSON serializable
我可以像这样解码加密:
jwt = jose.serialize_compact(jwe)
但是用这个加密值解密会引起错误。我不想在解密过程中对jwt
进行编码。你知道吗
不管怎样,我可以在加密时获得string
而不是byte
,这样我就可以将它转储到JSON。你知道吗
首先,Demonware/JOSE项目最初是为python2编写的,您可能正在使用Python 3 branch。有unresolved issues with the implementation,对我来说,这意味着软件包作者实际上并没有很好地理解这个问题。JWT令牌在其紧凑的序列化中只是一系列URL安全的Base64字符串,这些字符串与
.
字符连接在一起。你知道吗无论何时加密或签署新令牌,都必须将字节解码为字符串(只需将字节值解码为ASCII)。验证或解密时,需要再次将字符串编码为字节。你知道吗
例如,要对JSON对象中的
jwt
值进行编码,您需要解码:Javascript Web令牌(JWT)的要点是作为文本与另一方交换。库通过声明方法返回一个字符串来合成问题。你知道吗
您可以使用默认的
utf-8
编解码器来缩短此时间,因为ASCII是UTF-8的一个子集:相反,您必须再次将压缩字符串编码为字节:
但是您基本上使用的是过时的软件;Demonware/jose project已经3年没有更新了。它还依赖于过时的、未维护的pycrypto包。你不想使用。你知道吗
相反,请看一下Authlib或JWCrypto,这两个模块是主动维护的,并使用^{} project 来处理棘手的加密原语(还有
pyjwt
和python-jose
,但这些项目不支持JWE加密,只支持JWS签名的令牌)。你知道吗其中,Authlib提供了迄今为止最干净、最清晰的API。例如,要生成公钥/私钥对并使用Authlib创建加密令牌,使用Demonware/JOSE选择的默认加密和签名算法,您可以执行以下操作:
注意,Authlib在这里也会返回一个
bytes
值,因此如果您想进一步将其嵌入JSON并将JSON负载中的令牌数据传递回jwt.decode()
方法,就必须对其进行解码和编码。你知道吗对JWCrypto使用相同的公钥和私钥序列化:
注意,这个库在序列化时确实返回一个字符串,但是您必须手动对声明进行JSON解码。API还将序列化和反序列化混合到一个类中,创建了一个非常混乱的参数、方法和属性的混合体。你知道吗
相关问题 更多 >
编程相关推荐