Openssl pem鍵ファイルrsa暗号化復号例

1913 ワード

準備作業
コード内のアルゴリズムとコマンドラインのアルゴリズムが一致するかどうかを比較するために、コマンドラインを暗号化して復号します.
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 
#include 
#include 
#include 
#include 
#include 

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