2016-03-28 19 views
0

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,

パディング;

+0

したがって、 'result'にはどのような価値がありますか? –

+0

@ EbbeM.Pedersen常に私が探している正しい長さは256です。しかし、変数 'encrypted'の長さは変化します。 –

答えて

1

暗号化されたデータの長さからresultに戻されます

encryptedで返される暗号化データはバイナリデータです。あなたはそれにstrlenをすることはできません。データは0で終了しておらず、ランダムな0が含まれている可能性があります。

+0

ありがとうございます。 BIO_f_base64()などのOpenSSL BIO関数を使用して、バイナリRSA出力をbase64でエンコードして使用することにしました。 –

関連する問題