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

原文地址:https://www.cnblogs.com/azbane/p/10180263.html

时间: 2024-07-30 20:50:47

C++调用openssl库生成RSA加密秘钥对的相关文章

RSA加解密 私钥加密公钥解密 私加公解 && C++ 调用openssl库 的代码实例

前提:秘钥长度=1024 ============================================== 对一片(117字节)明文加密  私加 ============================================== // 私钥加密 std::string rsa_pri_encrypt(const std::string &clearText, std::string &pubKey) { std::string strRet; BIO *keybio

使用openssl库实现RSA、AES数据加密

使用openssl库实现RSA.AES数据加密 openssl是可以很方便加密解密的库,可以使用它来对需要在网络中传输的数据加密.可以使用非对称加密:公钥加密,私钥解密.openssl提供了对RSA的支持,但RSA存在计算效率低的问题,所以一般的做法是使用对称密钥加密数据,然后再把这个只在当前有效的临时生成的对称密钥用非对称密钥的公钥加密之后传递给目标方,目标方使用约定好的非对称密钥中的私钥解开,得到数据加密的密钥,再进行数据解密,得到数据,这种使用方式很常见,可以认为是对HTTPS的裁剪.对称

Mac下如何生成RSA加密的私钥和公钥

关于RSA加密算法的介绍这里就不复制粘贴了,下面讲的是如何在Mac下利用命令行生成RSA的私钥和公钥. 使用command生成2048位的私有密钥 openssl genrsa -out private_key.pem 2048 当前的目录下会生成一个名为 private_key.pem 的文件,如果用文本编辑器打开,你会发现是这样的: 这些东西就是我们刚刚生成的密钥,这个东西只能放在服务端,如果这个东西泄漏,整个RSA加密环节就暴露了. 接下来我们利用私钥生成公钥(command命令必须在刚才

使用python调用zxing库生成二维码图片

(1)     安装Jpype 用python调用jar包须要安装jpype扩展,在Ubuntu上能够直接使用apt-get安装jpype扩展 $ sudo apt-get install python-jpype 关于使用Jpype调用jar包的方式.请看http://blog.csdn.net/niuyisheng/article/details/9002926 (2)     得到zxing  jar包 使用zxing第三方库生成二维码图片,关于zxing的介绍能够看其github地址:h

linux下如何调用opencv库生成

首先先简介下linux系统下程序的库函数分为三种类型: 1.静态函数库:在程序执行前加入到目标程序中: 2.共享函数库:在程序启动的时候加载到程序中,被不同程序共享: 3.动态函数库:在程序运行的任何时候动态的加载 linux 下的.o文件是目标文件相当于windows的obj文件: .so文件是共享库相当于windows的shared object: .a文件是静态库由好多个.o文件合在一起,用于静态链接: .la为libtool自动生成的一些共享库:

ssh-keygen && ssh-copy-id 生成管理传输秘钥

原文地址:https://www.cnblogs.com/jianlibao/p/10010267.html

OpenSsl库 Rsa的简单使用

环境的配置可以参考http://www.cnblogs.com/yangyquin/p/5284530.html 网络上传输的数据很容易被抓包,如果不加密,那么网络数 据很容易被窃取,诸如用户名.密码这些明感的信息一旦丢 失,将会造成巨大的损失. 2.常用的加密方式 对称加密:加密方和解密方使用同一个秘钥 优点:加密解密过程简单,高效 缺点:有一 方泄密了,则整个加密就失去了意义 非对称加密:加密方和解密方使用不同的秘钥 优点:解密的秘钥无法由加密的秘钥,即使加密方暴露出  了秘钥也没事,这种加

RSA 加解密 秘钥对说明

rsa非对称加密, 加解密需要不同的秘钥,称作一对. rsa加解密分两种,第一:公钥加密私钥解密.第二:私钥加密公钥解密. 需要注意的是,公加私解得到的密文是变化的,而私加公解的得到的密文是固定的. 生成密匙对需要设置一个长度,常用的设置为1024,或者2048.注意,不同长度的密匙,能够加密的明文最长度是有限制的.说明如下: 1024的情况: 加密时,明文最大长度: 1024/8 - 11 = 117   ,因此需要对明文做117字节长度的分片加密,再拼接. 解密时,密文最大长度:1024/8

RSA加密:利用模数和指数生成公钥加密

引子    目前做一款金融产品,由于涉及到资金安全,采用动态公钥的方式,即客户端每次登录服务端返回一个不同的XML串,由公钥的模数和指数构成,我需要用这个串生成公钥加密相关信息.服务端返回的XML串形如:“<RSAKeyValue><Modulus>wVwBKuePO3ZZbZ//gqaNuUNyaPHbS3e2v5iDHMFRfYHS/bFw+79GwNUiJ+wXgpA7SSBRhKdLhTuxMvCn1aZNlXaMXIOPG1AouUMMfr6kEpFf/V0wLv6NCH