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

7 篇文章 0 订阅
4 篇文章 0 订阅

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

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值