C++调用openssl库生成RSA加密秘钥对

直接上代码。默认生成的是pkcs#1格式

// ---- rsa非对称加解密 ---- //    
#define KEY_LENGTH  1024               // 密钥长度  
#define PUB_KEY_FILE "pubkey.pem"    // 公钥路径  
#define PRI_KEY_FILE "prikey.pem"    // 私钥路径  

// 函数方法生成密钥对   
void generateRSAKey(std::string strKey[2])  
{  
    // 公私密钥对    
    size_t pri_len;  
    size_t pub_len;  
    char *pri_key = NULL;  
    char *pub_key = NULL;  

    // 生成密钥对    
    RSA *keypair = RSA_generate_key(KEY_LENGTH, RSA_F4, NULL, NULL);  

    BIO *pri = BIO_new(BIO_s_mem());
    BIO *pub = BIO_new(BIO_s_mem()); 

    PEM_write_bio_RSAPrivateKey(pri, keypair, NULL, NULL, 0, NULL, NULL);  
    PEM_write_bio_RSAPublicKey(pub, keypair);  

    // 获取长度    
    pri_len = BIO_pending(pri);  
    pub_len = BIO_pending(pub); 

    // 密钥对读取到字符串
    pri_key = (char *)malloc(pri_len + 1);  
    pub_key = (char *)malloc(pub_len + 1);  

    BIO_read(pri, pri_key, pri_len);  
    BIO_read(pub, pub_key, pub_len);  

    pri_key[pri_len] = '\0';  
    pub_key[pub_len] = '\0';  

    // 存储密钥对    
    strKey[0] = pub_key;  
    strKey[1] = pri_key;  

    // 存储到磁盘(这种方式存储的是begin rsa public key/ begin rsa private key开头的)  
    FILE *pubFile = fopen(PUB_KEY_FILE, "w");  
    if (pubFile == NULL)  
    {  
        assert(false);  
        return;  
    }  
    fputs(pub_key, pubFile);  
    fclose(pubFile);  

    FILE *priFile = fopen(PRI_KEY_FILE, "w");  
    if (priFile == NULL)  
    {  
        assert(false);  
        return;  
    }  
    fputs(pri_key, priFile);  
    fclose(priFile);  

    // 内存释放  
    RSA_free(keypair);  
    BIO_free_all(pub);  
    BIO_free_all(pri);  

    free(pri_key);  
    free(pub_key);  
}  

 

附1:C++ 使用openssl库实现 DES 加密——CBC模式 && RSA加密——公加私解——私加公解

 

原文链接: https://www.cnblogs.com/azbane/p/10180263.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    C++调用openssl库生成RSA加密秘钥对

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/398672

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年4月12日 上午9:46
下一篇 2023年4月12日 上午9:46

相关推荐