使用libcrypto和mongoose進行RSA_BASE64 加密解密 Demo

rsa base64加密:

#include <openssl/rsa.h>

#include <openssl/pem.h>

#include <openssl/err.h>

#include <assert.h>

#include "mongoose.h"

static char *mqtt_passwd_encrypt() {

FILE *fd = fopen("./public_key.pem", "r");

if (!fd) return NULL;

RSA *rsa = PEM_read_RSA_PUBKEY(fd, NULL, NULL, NULL);

fclose(fd);

char *src = NULL;

int src_len = asprintf(&src, "%s", "484d7ebdb1d9");

printf( "input: %s", src);

int rsa_len = RSA_size(rsa);

char *en = (char *)calloc(rsa_len + 1, sizeof(char));

int en_len = RSA_public_encrypt(src_len, (unsigned char *)src, (unsigned char*)en, rsa, RSA_PKCS1_PADDING);

free(src);

if (en_len < 0) {

RSA_free(rsa);

free(en);

return NULL;

}

char *out = (char *)calloc(en_len * 2, sizeof(char));

assert(out != NULL);

printf( "output: %s", en);

mg_base64_encode((const unsigned char *)en, en_len, out);

printf( "output: %s", out);

free(en);

RSA_free(rsa);

return out;

}

int main(int argc, const char *argv[])

{

mqtt_passwd_encrypt();

return 0;

}

 

rsa base64解密:

#include <openssl/rsa.h>

#include <openssl/pem.h>

#include <openssl/err.h>

#include <assert.h>

#include "mongoose.h"

char *my_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_PKCS1_PADDING)<0){

return NULL;

}

RSA_free(p_rsa);

fclose(file);

return p_de;

}

 

int main(int argc, const char *argv[])

{

char str[1000]={0};

char *str1;

int i;

mg_base64_decode(argv[1],strlen(argv[1]),str);

str1 = my_decrypt(str,"./private_key.pem");

printf("======================decrypt \n");

printf("%s\n",str1);

return 0;

}

 

編譯:

gcc 文件名 mongoose.c -lcrypto

若無法讀文件,沒有文件IO,可使用openssl將公鑰/私鑰解析,直接傳參。

公鑰獲得參數命令:openssl rsa -pubin -inform PEM -text < Key1_pub.txt

私鑰獲得參數命令:openssl rsa -inform PEM -text < private_key.pem 

Modulus:RSA_N    Exponent:RSA_E    private Exponent:RSA_D    prime1:RSA_P    prime2:RSA_Q    exponent1:RSA_DP    exponent2:RSA_DQ    coefficient:RSA_QP

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章