【问题标题】:OpenSSL Variable Length Result for RSA Encryption [C programming]RSA 加密的 OpenSSL 可变长度结果 [C 编程]
【发布时间】:2016-07-15 23:52:20
【问题描述】:

我正在尝试使用 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] = '\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 位大小)之间,如 here 所示,但我的代码使用的是 RSA_PKCS1_PADDING 所以我不确定为什么我仍然会变长度输出。

【问题讨论】:

  • 那么您在result 中获得了什么价值?
  • @EbbeM.Pedersen 总是 256,这是我正在寻找的正确长度。但是,变量encrypted 的长度会有所不同。

标签: c encryption openssl cryptography rsa


【解决方案1】:

result中返回加密数据的长度来自:

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

encrypted返回的加密数据是二进制数据。你不能对它做一个 strlen 。数据不是以 0 结尾的,并且可能包含一些随机的 0。

【讨论】:

  • 谢谢。我决定使用 BIO_f_base64() 等 OpenSSL BIO 函数对二进制 RSA 输出进行 base64 编码以供进一步使用。
猜你喜欢
  • 1970-01-01
  • 2010-12-02
  • 1970-01-01
  • 2018-10-27
  • 2013-10-21
  • 2011-05-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多