【发布时间】: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