从模数和指数生成公钥(再次)

时间:2021-02-09 16:38:53

标签: jwt rsa azure-ad-b2c public-key

我知道 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, 'big', signed=False)

rsaKey = construct((n, e))                                                                                      
pubKey = rsaKey.exportKey()                                                                                            
print(pubKey.decode('ascii'))

但是每当我尝试验证 jwt 令牌时,我都会收到“signature_invalid”错误。

我是否没有正确解码二进制编码的字节?

----更新--- 正如评论中所建议的,我已经更新了我的代码以首先对字节进行 url 解码,但我仍然收到与以前相同的签名无效错误。

0 个答案:

没有答案
相关问题