假设我想在我的c ++应用程序中使用类似于openssl命令的代码。
openssl rsa -in private.pem -pubout -outform der -out ./out.pub
我该怎么做?
我在github上寻找样本,然后提出了跟随计划。
key = PEM_read_bio_RSAPrivateKey(bio, NULL, 0, NULL);
len = i2d_RSAPublicKey(key, &bufp);
它返回的值与我从命令行工具获得的值不同。我想没有从私钥到公共的转换,它只是保存私钥。任何人都可以告诉我使用openssl lib从私有方式获取pub密钥的正确方法。我也非常感谢openssl的pub \ priv关键示例的任何链接。
答案 0 :(得分:1)
最后,我在openssl内部找到了合适的资源。这正是
期间发生的事情openssl rsa -in private.pem -poutout -outform der -out ./out.pub
我从原始代码中删除了大量支票,以使其缩小。
#include <openssl/pem.h>
#include <openssl/x509.h>
EVP_PKEY *load_key(const char *file)
{
BIO *key=NULL;
EVP_PKEY *pkey=NULL;
key=BIO_new(BIO_s_file());
BIO_read_filename(key,file);
pkey=PEM_read_bio_PrivateKey(key,NULL,NULL,NULL);
return pkey;
}
int _tmain(int argc, _TCHAR* argv[])
{
BIO *out=NULL;
out=BIO_new(BIO_s_file());
EVP_PKEY *pkey;
RSA *rsa=NULL;
char *infile = path_to_pem;
char *outfile = path_to_der;
pkey = load_key(infile);
if (pkey != NULL)
rsa = EVP_PKEY_get1_RSA(pkey);
EVP_PKEY_free(pkey);
BIO_write_filename(out,outfile);
i2d_RSA_PUBKEY_bio(out,rsa);
}