openssl pem密钥文件rsa加密解密例子

准备工作

命令行加密解密,用与比对代码中的算法和命令行的算法是否一致

C:\openssl_test>openssl rsautl -encrypt -in data.txt -inkey public.pem -pubin -out data.en
C:\openssl_test>openssl rsautl -decrypt -in data.en -inkey private.pem -out data.de


-pubin表示使用纯公钥加密


#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <openssl/bn.h>
#include <openssl/rsa.h>
#include <openssl/pem.h>

#include <openssl/applink.c>
#pragma comment(lib, "libeay32.lib")
#pragma comment(lib, "ssleay32.lib")


int main()
{
	RSA *rsaKey;

	char fData[]="j23ur2jfsf-=20r034ujf";
	char tData[128];
	
	
	FILE *fp;
	fp = fopen("C:\\openssl_test\\public.pem", "r");

	int strLen = strlen(fData);
	
    rsaKey = PEM_read_RSA_PUBKEY(fp, NULL, NULL, NULL);
	int ret = RSA_public_encrypt(strLen, (unsigned char *)fData, (unsigned char*)tData, rsaKey, RSA_PKCS1_PADDING);
	//每次加密出来的tData都不一样,因为填充了随机数
	RSA_free(rsaKey);
	fclose(fp);

	//此段代码用户比对,校验命令行的加密
	//将结果写入文件,生成的文件用命令行解密
	//openssl rsautl -decrypt -in pdata.en -inkey private.pem -out pdata.de
	fp = fopen("C:\\openssl_test\\pdata.en", "wb");
	fwrite(tData , ret, 1 , fp );
	fclose(fp);




	fp = fopen("C:\\openssl_test\\private.pem", "r");
	rsaKey = PEM_read_RSAPrivateKey(fp,NULL,NULL,NULL);
	ret = RSA_private_decrypt(128, (unsigned char *)tData, (unsigned char *)fData, rsaKey, RSA_PKCS1_PADDING);  

	
	fclose(fp);
	
	//此段代码用于比对,校验命令行的解密
	//将命令行生成的加密文件读入内存,然后解密
	//openssl rsautl -encrypt -in data.txt -inkey public.pem -pubin -out data.en
	fp = fopen("C:\\openssl_test\\data.en", "rb");
	fread(tData , 128, 1 , fp );

	ret = RSA_private_decrypt(128, (unsigned char *)tData, (unsigned char *)fData, rsaKey, RSA_PKCS1_PADDING);  
	fclose(fp);
	

	RSA_free(rsaKey);
	return 0;   
}
 





转载于:https://www.cnblogs.com/ruanjianxian/p/6126841.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值