RSA加密的OpenSSL可变长度结果

我正在尝试使用OpenSSL的RSA加密function加密一些文本。 我的主要问题是加密的RSA文本的长度在0到256之间变化。

我的RSA加密function是:

/* Encrypt data using RSA */ char* rsa_encrypt(char* pub_key_filename, const unsigned char *data) { int padding = RSA_PKCS1_PADDING; FILE *fp_pub; fp_pub = fopen(pub_key_filename, "rb"); if (fp_pub == NULL) { printf("There was an error opening the public key file. Exiting!\n"); exit(EXIT_FAILURE); } RSA *pub_key = PEM_read_RSA_PUBKEY(fp_pub, NULL, NULL, NULL); char *encrypted = malloc(2048); int i; for (i = 0; i < (2048); i++) { encrypted[i] = '\0'; } int result = RSA_public_encrypt(strlen(data), data, encrypted, pub_key, padding); if (result == -1) { printf("There was an error during RSA encryption.\n"); return "ERROR_RSA_ENCRYPTION"; } fclose(fp_pub); return encrypted; } 

以下代码涉及尝试加密某些文本:

 const unsigned char *key = (unsigned char *)"abcdefghijklmnopqrstuvwxyzabcdef"; unsigned char *encrypted_aes_key = rsa_encrypt("public.pem", key); 

我知道没有填充的RSA是原始RSA加密,结果长度介于0和n之间(RSA位大小),如我所见,但我的代码使用RSA_PKCS1_PADDING,所以我不知道为什么我仍然得到可变长度输出。

加密数据的长度在以下result返回:

int result = RSA_public_encrypt(strlen(data), data, encrypted, pub_key, padding);

加密返回的加密数据是二进制数据。 你不能在它上面做一个strlen。 数据不会终止,并且可能包含一些随机0。