OpenSSLのRSA暗号化機能を使用してテキストを暗号化しようとしています。RSA暗号化のOpenSSL変数長結果[Cプログラミング]
/* 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のテキストは
0〜256マイRSA暗号化機能がある変わるの長さということです
パディングなしのRSAはプリミティブなRSA暗号化であり、その結果の長さはhereのように0とn(RSAビットサイズ)の間ですが、私のコードはRSA_PKCS1_PADDINGを使用しているので、なぜ可変長出力を得ているのかわかりません。 )
int result = RSA_public_encrypt(strlen(data), data, encrypted, pub_key,
パディング;
したがって、 'result'にはどのような価値がありますか? –
@ EbbeM.Pedersen常に私が探している正しい長さは256です。しかし、変数 'encrypted'の長さは変化します。 –