79 Openssl3.0 RSA公钥加密数据

1 引言

最近不小心用到了openssl3.0,项目中需要使用rsa非对称加解密算法,所以把openssl3.0使用公钥加密数据的函数调用摸了一遍。

之所以记录此篇文章,是因为网络上大多数是openssl3.0以前的版本的函数接口,而openssl3.0之后已经丢弃了很多旧接口了,导致我网上搜索例程的时候,不是很顺利(看到的基本都是旧接口不能用),因此特此记录。

2 实验

废话少说,直接上代码:

cpp 复制代码
int rsa_publickey_enc(char *p_data_in, int data_in_len, char *p_data_out, int data_outbuff_len, int *p_data_out_len)
{
	int int_ret = 0;
	size_t rsa_inlen=data_in_len;
	size_t rsa_outlen=0;
	
	uint8_t *rsa_in=p_data_in;
	uint8_t *rsa_out=p_data_out;
	
	uint8_t pad=RSA_PKCS1_PADDING;
	
	BIO *in=NULL;
	EVP_PKEY *pkey=NULL;
	EVP_PKEY_CTX *ctx=NULL;

	do
	{
			in = BIO_new_file("publickey.pem", "r");
			
			pkey = PEM_read_bio_PUBKEY(in,NULL,0,NULL);
			
			ctx = EVP_PKEY_CTX_new_from_pkey(NULL,pkey,NULL);
			
			EVP_PKEY_encrypt_init(ctx);
			
			EVP_PKEY_CTX_set_rsa_padding(ctx,pad);
			
			EVP_PKEY_encrypt(ctx, rsa_out, &rsa_outlen ,rsa_in,rsa_inlen);
			
			*p_data_out_len = rsa_outlen;
	}
	while(0);

	EVP_PKEY_CTX_free(ctx);
	EVP_PKEY_free(ctx);
	BIO_free(in);

	return int_ret;
}

至于上述代码返回值得判断啥的,我就没有判断了(注意:实际使用时请按编码规范编程)。

以上,over!