2011-05-16 193 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