我正在尝试使用OpenSSL加密lib,它在一个调用中崩溃,这是我见过的每个例子中的主要内容。以下是它的设置方式:
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
。
有什么想法吗?谢谢!
答案 0 :(得分:3)
您需要检查PEM_read_bio_RSA_PUBKEY()
的返回值,以确保它为非null。很可能_publicKey
的内容不是格式正确的密钥,因此pubKey
为NULL。
答案 1 :(得分:1)
尝试使用PEM_read_bio_RSAPublicKey
代替PEM_read_bio_RSA_PUBKEY
。