openssl证书生成和使用

1、输入openssl.exe,进入openssl命令模式下

2、生成私钥输入“genrsa -out app_private_key.pem 1024” 生成1024位的私钥

  -----BEGIN RSA PRIVATE KEY-----
  MIICXAIBAAKBgQCc99G6k+WKaqqXfsSiQ/mc1ugmGOuCHFPdIaHJa/4kKZ1HKY0X
  fC6UBNDTq3rw8KrlL3QIBbnsZhaPjrDB0KRsCkPZQ/Q9hogLn5vD+wR/zL3aTM7y
  EbZVyuasRGW73J5qTsTvqwjWmnHW+ywmdc8NoT7gQCXK5Xk2i5R53nHvQQIDAQAB
  AoGAZ/vHpRkKq7pjzj49Vt0/A4ZefbZudV/8snXwLnXrAtvKg/TjsdYjKQ1TpZVo
  uSpFm9PmwtXAR/mNIoa9U3e7I4nDqc0cIyz20hY3cKS6/5xdlV1llt8SZFm7Lgdq
  IacrQQIiIK76Fn8wh9DGXClaBFxVGOWZ9w3DHBruUGWRPQ0CQQDKAjOwBIEhK0wk
  i09T39WIioegmnyGSU0BYxQEOzGaFlESckT/H57JMAIcWzlLYVhv3kLfgt8MZ6RW
  Zz8U2d5rAkEAxuvcKfIg1O/5NUBmzoXPKkEfXdz82v4okCemmXOECAU6lZut4O80
 x27sMgiUJxWJtZ4GukDhgcZTXh05cZn8AwJANzoE4YFJwESzC2aeqGKQYUTmMW0q
 0BeoGtH4ffOk6uhg/7cHz+vYIE6ktRXngwk5AVR1Wd/QlPacwhZ184BgwwJBAI7N
 c9iJAhjbzcP039kTJo3nAmWX584u91/Fl0xCKV64oj4U7Na14uXpM5cXoYQNajb/
 o0TCnyFTBzZhNIPhT5ECQEP7ihPRx/eoY+VUtbivRd7IIwakmfQQIUqSy2UWOBKl
 5383JJjz1dQ7t3loaMTL9nD9PpoqBALbeSqEkzqS0Og=
 -----END RSA PRIVATE KEY-----

3、输入:“rsa -in app_private_key.pem -pubout -out app_public_key.pem” #生成公钥

  -----BEGIN PUBLIC KEY-----
  MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCc99G6k+WKaqqXfsSiQ/mc1ugm
  GOuCHFPdIaHJa/4kKZ1HKY0XfC6UBNDTq3rw8KrlL3QIBbnsZhaPjrDB0KRsCkPZ
  Q/Q9hogLn5vD+wR/zL3aTM7yEbZVyuasRGW73J5qTsTvqwjWmnHW+ywmdc8NoT7g
  QCXK5Xk2i5R53nHvQQIDAQAB
  -----END PUBLIC KEY-----

4、测试代码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<openssl/rsa.h>
#include<openssl/pem.h>
#include<openssl/err.h>
#define OPENSSLKEY "app_private_key.pem"
#define PUBLICKEY "app_public_key.pem"
#define BUFFSIZE 1024
char *rsa_encrypt(char *str,char *public_key){
	char *p_en;
	RSA *p_rsa;
    FILE *file;
    int flen,rsa_len;
    if((file=fopen(public_key,"r"))==NULL){
         perror("open key file error");
         return NULL;    
    }   
    if((p_rsa=PEM_read_RSA_PUBKEY(file,NULL,NULL,NULL))==NULL){
        ERR_print_errors_fp(stdout);
        return NULL;
    }   
    flen=strlen(str);
    rsa_len=RSA_size(p_rsa);
    p_en=(unsigned char *)malloc(rsa_len+1);
    memset(p_en,0,rsa_len+1);
    if(RSA_public_encrypt(rsa_len,(unsigned char *)str,(unsigned char*)p_en,p_rsa,RSA_NO_PADDING)<0){
		return NULL;
    }
    RSA_free(p_rsa);
    fclose(file);
    return p_en;
}
char *rsa_decrypt(char *str,char *path_key){
	char *p_de;
	RSA *p_rsa;
    FILE *file;
    int rsa_len;
    if((file=fopen(path_key,"r"))==NULL){
		perror("open key file error");
		return NULL;
	}
	if((p_rsa=PEM_read_RSAPrivateKey(file,NULL,NULL,NULL))==NULL){
		ERR_print_errors_fp(stdout);
		return NULL;
	}
	rsa_len=RSA_size(p_rsa);
	p_de=(unsigned char *)malloc(rsa_len+1);
    memset(p_de,0,rsa_len+1);
    if(RSA_private_decrypt(rsa_len,(unsigned char *)str,(unsigned char*)p_de,p_rsa,RSA_NO_PADDING)<0){
		return NULL;
	}
    RSA_free(p_rsa);
	fclose(file);
	return p_de;
}

int main(void){
     char *source="test";
     char *ptr_en,*ptr_de;
     printf("source is    :%s\n",source);
     ptr_en=rsa_encrypt(source,PUBLICKEY);
     printf("after encrypt:%s\n",ptr_en);
     ptr_de=rsa_decrypt(ptr_en,OPENSSLKEY);
     printf("after decrypt:%s\n",ptr_de);
     if(ptr_en!=NULL){
         free(ptr_en);
     }   
     if(ptr_de!=NULL){
         free(ptr_de);
     }   
     return 0;
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值