openssl使用

【openssl】如何利用openssl命令行快速生成RSA私钥?_架构师李肯-CSDN博客_openssl生成私钥命令

openssl genrsa -out rsa2048.key -des3 2048 

 

C++ OpenSSL 之一:编译和使用 - pcwen.top - 博客园

1.官网 /index.html

当前使用版本为OpenSSL 1.1.1c

2.编译

①下载后解压,假设解压位置为/home/openssl-1.1.1c

②./config

③make install

会生成ssl库以及crypto库

3.代码需要的头文件

#include <stdio.h>
#include <stdlib.h>
#include <openssl/pem.h>
#include <openssl/err.h>
#include <openssl/pkcs12.h>

4.链接需要的库(-L指定库的具体位置,避免系统存在多个库的干扰导致函数找不到的问题!)

g++ *.cpp -L /home/openssl-1.1.1c -l ssl -l crypto

5.文件类型关系说明

①使用函数生成RSA private key

②RSA private key 使用函数生成 CSR

③CSR请求服务器获得CER(比如苹果开发者后台上传CSR文件后,可以下载对应的CER文件)

④CER函数转换为PEM(转换为PEM是为了生成P12)

⑤RSA private key + PEM 使用函数生成P12

例子
[转贴]C++调用openssl 的AES加密例子 - redmondfans - 博客园

C++ 使用OpenSSL_xunmeng2002的专栏-CSDN博客_c++ openssl

#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#include <stdlib.h>
#include <unistd.h>
#include <openssl/aes.h>

//g++ -g -o -Wall -m64 AesTest AesTest.cpp -lssl -lcrypto
//g++ -g -o -Wall AesTest AesTest.cpp -lssl -lcrypto

int main(int argc, char **argv)
{//由于与直接对接用的char,那么加解密要强制转换
    char Source[1024];
    char *InputData=NULL;
    char *EncryptData=NULL;
    char *DecryptData=NULL;
     
    unsigned char Key[AES_BLOCK_SIZE+1];    //建议用unsigned char
    unsigned char ivec[AES_BLOCK_SIZE];     //建议用unsigned char
    AES_KEY AesKey;
     
    int DataLen=0,SetDataLen=0, i;

    memset(Source, 0x00, sizeof(Source));
    strcpy(Source, "1234567890abcde");  //要加密的数据
    DataLen = strlen(Source);

    memset(Key, 0x00, sizeof(Key));
    memcpy(Key, "0123456789abcdef", AES_BLOCK_SIZE);

 // set the encryption length
    SetDataLen = 0;
    if ((DataLen%AES_BLOCK_SIZE) == 0)
    {
        SetDataLen = DataLen;
    }
    else
    {
        SetDataLen = ((DataLen/AES_BLOCK_SIZE)+1) * AES_BLOCK_SIZE;
    }
    printf("SetDataLen:%d...\n", SetDataLen);   //取16的倍数
     
    InputData = (char *)calloc(SetDataLen+1, sizeof(char));
    if(InputData == NULL)   //注意要SetDataLen+1
    {
        fprintf(stderr, "Unable to allocate memory for InputData\n");
        exit(-1);
    }
    memcpy(InputData, Source, DataLen);
     
    EncryptData = (char *)calloc(SetDataLen+1, sizeof(char));
    if(EncryptData == NULL) //注意要SetDataLen+1
    {
        fprintf(stderr, "Unable to allocate memory for EncryptData\n");
        exit(-1);
    }
     
    DecryptData = (char *)calloc(SetDataLen+1, sizeof(char));
    if(DecryptData == NULL) //注意要SetDataLen+1
    {
        fprintf(stderr, "Unable to allocate memory for DecryptData\n");
        exit(-1);
    }

    memset(&AesKey, 0x00, sizeof(AES_KEY));
    if(AES_set_encrypt_key(Key, 128, &AesKey) < 0)
    {//设置加密密钥
        fprintf(stderr, "Unable to set encryption key in AES...\n");
        exit(-1);
    }

    for(i=0; i<AES_BLOCK_SIZE; i++)
    {//必须要有
        ivec[i] = 0;
    }
    //加密
    AES_cbc_encrypt((unsigned char *)InputData, (unsigned char *)EncryptData, 
        SetDataLen, &AesKey, ivec, AES_ENCRYPT);   

    memset(&AesKey, 0x00, sizeof(AES_KEY));
    if(AES_set_decrypt_key(Key, 128, &AesKey) < 0)
    {//设置解密密钥
        fprintf(stderr, "Unable to set encryption key in AES...\n");
        exit(-1);
    }

    for(i=0; i<AES_BLOCK_SIZE; i++)
    {//必须要有
        ivec[i] = 0;
    }
    //解密
    AES_cbc_encrypt((unsigned char *)EncryptData, (unsigned char *)DecryptData, 
        SetDataLen, &AesKey, ivec, AES_DECRYPT); 

    printf("DecryptData:%s...\n", (char *)DecryptData);

    if(InputData != NULL)
    {
        free(InputData);
        InputData = NULL;
    }
     
    if(EncryptData != NULL)
    {
        free(EncryptData);
        EncryptData = NULL;
    }
     
    if(DecryptData != NULL)
    {
        free(DecryptData);
        DecryptData = NULL;
    }

    exit(0);
}

openssl genrsa -out rsa_private_key.pem  1024
openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
openssl的使用_廖钺焕的博客-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值