问题描述
我知道 SO 上已经有了答案,但是在尝试了其中的几个 (ex1,ex2) 之后,我仍然无法根据模数和指数生成正确的公钥。
这是我的python3代码:
from Crypto.PublicKey.RSA import construct
import urllib.parse
import base64
import re
def decode_base64(data,altchars=b'+/'):
"""Decode base64,padding being optional.
:param data: Base64 data as an ASCII byte string
:returns: The decoded byte string.
"""
data = re.sub(rb'[^a-zA-Z0-9%s]+' % altchars,b'',data) # normalize
missing_padding = len(data) % 4
if missing_padding:
data += b'='* (4 - missing_padding)
return base64.b64decode(data,altchars)
e = int.from_bytes(decode_base64(b'AQAB'),'big',signed=False)
decoded = decode_base64(b'tVKUtcx_n9rt5afY_2WFNvU6PlFMggCatsZ3l4RjKxH0jgdLq6CScb0P3ZGXYbPzXvmmLiWZizpb-h0qup5jznOvOr-Dhw9908584BSgC83YacjWNqEK3urxhyE2jWjwRm2N95WGgb5mzE5XmZIvkvyXnn7X8dvgFPF5QwIngGsDG8LyHuJWlaDhr_EPLMW4wHvH0zZCuRMARIJmmqiMy3VD4ftq4nS5s8vJL0pVSrkuNojtokp84AtkADCDU_BUhrc2sIgfnvZ03koCQRoZmWiHu86SuJZYkDFstVTVSR0hiXudFlfQ2rOhPlpObmku68lXw-7V-P7jwrQRFfQVXw','big')
n = int.from_bytes(decoded,signed=False)
rsaKey = construct((n,e))
pubKey = rsaKey.exportKey()
print(pubKey.decode('ascii'))
但是每当我尝试验证 jwt 令牌时,我都会收到“signature_invalid”错误。
我是否没有正确解码二进制编码的字节?
----更新--- 正如评论中所建议的,我已经更新了我的代码以首先对字节进行 url 解码,但我仍然收到与以前相同的签名无效错误。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)