来自mem的OPENSSL RSA公钥读取

时间:2014-12-08 06:33:43

标签: openssl

尝试从mem加载公钥时遇到问题。 在我使用PEM_read_RSA_PUBKEY从磁盘加载密钥之前。但是因为这会让Cracker让我的公钥变得太容易了。我想从CString而不是文件加载它。 而我试图这样做:

    CString csPubKey = 
    L"-----BEGIN PUBLIC KEY-----"
    L"MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC/g+aYSWhuJc4J30n5U5iC9cwr"
    L"N7Su2NeO/EwubqjypfWY8W9B+lfNk9q2CoTyb5LtZI19rLCY8yrX1vIKLMRzHNri"
    L"LSXNAk+tWsnf7qupJep6mn5EeAPV7AG1p1i7txvoWBf289YI8wlGsr0DMUIfQxAW"
    L"hSwlRYqJ64wRx7sXMQIDAQAB"
    L"-----END PUBLIC KEY-----";

BIO *bio = BIO_new_mem_buf(CW2A(csPubKey.GetBuffer()),csPubKey.GetLength());


if(PEM_read_bio_RSA_PUBKEY(bio,&pRSAPublicKey, 0, 0) == NULL)
{
    CStringA err = ERR_error_string(ERR_get_error(), NULL);
    //assert(false);
    return "";
}

我得到错误错误:0906D06C:lib(9):func(109):当PEM_read_bio_RSA_PUBKEY时的原因(108)。 在Google上,它表示这不是起跑线。谁知道我做错了什么?

2 个答案:

答案 0 :(得分:0)

  

PEM_read_bio_RSA_PUBKEY ...在Google上它说这不是起跑线。

它是一个宽字符串。首先将它转换为一个窄字符串。

您还应该从sPubKey.GetBuffer()释放缓冲区。


  

...因为这会让Cracker太容易接受我的公钥。

它是一把公钥。它意味着自由分发。

答案 1 :(得分:0)

我使用CStringA并修复了问题,我不知道为什么CW2A不能同样工作。