在 C/C++ 中从模数和指数生成 RSA 公钥

时间:2021-03-22 02:10:59

标签: c++ oauth rsa public-key

我正在尝试从 OAUTH 服务器的密钥端点提供的模数和指数中获取 RSA Pubkey。我知道数据首先必须经过 base64 url​​ 解码,而且我有一个经过验证的函数。

我找到了创建公钥的 Python 代码,该公钥成功验证了来自我的服务器的令牌,因此我尝试在 C++ 代码中重现它。 Python 代码在这里:

https://github.com/RobertoPrevato/PythonJWTDemo/blob/master/jwksutils.py

我的 C 代码生成的公钥 PEM 输出在我尝试使用时无法加载。它非常接近 Python 输出,实际上它们是相同的除了Python 代码在键的开头有一个额外的 32 个字符,与我的代码输出不同。其他一切都完全一样!是否应该在 PEM 密钥的前面添加一些我丢失的东西?这是 C++ 代码:

void print_rsa_from_m_and_e(const char* m_data_raw, const char* e_data_raw)
{
    RSA * pubkey = RSA_new();
    BIGNUM * modul = BN_new();
    BIGNUM * expon = BN_new();

    BN_bin2bn(&modul, m_data_raw);
    BN_bin2bn(&expon, e_data_raw);

    RSA_set0_key( pubkey, modul, expon, nullptr );

    BIO* bio_out bio_out = BIO_new_fp( stdout, BIO_NOCLOSE );
    PEM_write_bio_RSAPublicKey( bio_out, pubkey );
}

我很想知道正确公钥前面的附加数据是什么以及我如何生成它。

0 个答案:

没有答案
相关问题