用于RSA加密的OpenSSL可变长度结果[C编程]



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

我的RSA加密功能是:

/* 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] = '';
   }
   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,填充);

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

最新更新