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