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