2011-05-16 164 views
2

我正在尝试使用OpenSSL加密库,它在我看到的每个示例中都是主食的调用中崩溃。下面是它是如何设置:为什么RSA_size会崩溃?

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); 

_publicKey是包含PEM格式的RSA密钥(与-----BEGIN XXX-----等)空结束的字符串。它在RSA_size中因访问不良而崩溃。

如果我删除BIO_free并不重要。

任何想法?谢谢!

回答

3

您需要检查PEM_read_bio_RSA_PUBKEY()的返回值以确保它不为空。 _publicKey的内容很可能不是格式正确的密钥,因此pubKey为NULL。

+1

Duh。感谢指向明显的指针!现在的问题是问题是什么,因为_publicKey是合法的。我唯一能看到的就是换行符被删除了。整个事件从XML数据库返回,并且该元素到控制台的XML转储显示----- BEGIN等的换行符。但是_publicKey的printf似乎没有换行符。 – Oscar 2011-05-16 13:27:39

+1

@Oscar - 是的,OpenSSL需要PEM编码中的新行。请参阅[无法在OpenSSL中设置公钥/私钥](http://stackoverflow.com/a/29929327/608639)以及围绕该答案的讨论。 (抱歉挖掘一个旧线程)。 – jww 2015-05-13 22:36:20

+0

在这方面没有伤害。感谢JWW。 – Oscar 2015-05-15 23:36:21

1

尝试PEM_read_bio_RSAPublicKey而不是PEM_read_bio_RSA_PUBKEY