C 为什么RSA_大小会崩溃?

C 为什么RSA_大小会崩溃?,c,openssl,cryptography,C,Openssl,Cryptography,我试图使用OpenSSL加密库,但它在一个调用中崩溃了,这是我所看到的每个示例中的一个主要部分。以下是它的设置方式: BIO* bp = BIO_new_mem_buf(_publicKey, -1); // Create a new memory buffer BIO. RSA* pubKey = PEM_read_bio_RSA_PUBKEY(bp, 0, 0, 0); // And read the RSA key from it. unsigned char encryptedRand

我试图使用OpenSSL加密库,但它在一个调用中崩溃了,这是我所看到的每个示例中的一个主要部分。以下是它的设置方式:

BIO* bp = BIO_new_mem_buf(_publicKey, -1); // Create a new memory buffer BIO.
RSA* pubKey = PEM_read_bio_RSA_PUBKEY(bp, 0, 0, 0); // And read the RSA key from it.

unsigned char encryptedRandKey[RSA_size(pubKey)];
BIO_free(bp);
\u publicKey
是一个以null结尾的字符串,包含一个PEM格式的RSA密钥(使用
----BEGIN XXX---
等等)。它在
RSA\u size
中因访问错误而崩溃

如果我删除
BIO\u free
,这无关紧要


有什么想法吗?谢谢

您需要检查
PEM\u read\u bio\u RSA\u PUBKEY()
的返回值,以确保它不为空。很可能是
\u publicKey
的内容格式不太正确,因此
publicKey
为空。

尝试
PEM\u read\u bio\r publicKey
而不是
PEM\u read\u bio\u RSA\u publicKey
。谢谢你给我们提供了显而易见的提示!现在的问题是问题是什么,因为公钥是合法的。我能看到的唯一一件事是,也许新词不知何故被删除了。整个过程以XML形式从数据库返回,该元素到控制台的XML转储显示------BEGIN等的换行符。但是_publicKey的printf似乎没有新行。@奥斯卡-是的,OpenSSL需要PEM编码中的新行。请参阅和围绕答案展开的讨论。(很抱歉挖出一根旧线)。这没什么害处。谢谢JWW。