我有以下JSON对象,它表示从网站获得的RSA256 JWK:
jwk = {
'e': 'AQAB',
'n': 'sAlE_mzYz-2jf_YpxulSJXv_2CGIquflNZWhXUaU1SkJm9P0riLAuzwK7WT5p0Ko3zmQHho70_7D9nqB01rA4ExrMIDKpprE0Qa7NAJN-kgZhd_A25HsdSfpOfpaLvR-mf9fuOTDPLRQCd5HnrjoQKjs3D_XfPmPnT_Ny5erviiky90GSfN9j2DP_5yeDprzWKF-EQ3EDdIWt3snr7AW8rzBcZ1ojyWxckLAeSKDerMXP-zVBUFJE9Kn60HZoGNvmATKaw8LwEbf8DGfrllgSLvhg7mDRMLlbcooQoWAFSfN7t7kFbPSOcvjrpx3Yw_KrEwBZXeUP3260ukmFOx8RQ',
}
下面是Perl代码,显示如何从上面的jwk构造Crypt库中的公钥对象:
^{pr2}$两个问题:
如何将上述代码翻译成Python?以下代码失败。在
在python中有了公钥对象之后,如何使用它来验证由相应私钥签名的JWT?请张贴一个片段,说明如何做到这一点。在
>>> from Crypto.PublicKey import RSA
>>> import base64
>>> public_key = RSA.construct((base64.b64decode(jwk['n']), base64.b64decode(jwk['e'])))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "my-virtual-env/lib/python2.7/site-packages/Crypto/PublicKey/RSA.py", line 539, in construct
key = self._math.rsa_construct(*tup)
File "my-virtual-env/lib/python2.7/site-packages/Crypto/PublicKey/_slowmath.py", line 84, in rsa_construct
assert isinstance(n, long)
AssertionError
由于RSA contructor需要2个长整数,而您使用的是两个字符串,因此引发此错误。在
解决方案是将base64解码后的字符串转换为十六进制整数。在
关于第二个问题,您可以使用this method来验证RSA签名的有效性。在
相关问题 更多 >
编程相关推荐