2016-03-28 23 views
0

OpenSSL'nin RSA şifreleme işlevlerini kullanarak bazı metni şifrelemeye çalışıyorum. Benim ana konu şifrelenmemiş RSA metnin uzunluğu My RSA şifreleme fonksiyonudur OpenSSL RSA Şifreleme için Değişken Uzunluk Sonucu [C programlama]

0 ile 256 değişken olmasıdır:

/* 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; 
} 

Aşağıdaki kod bazı metinleri şifrelemek için çalışıyor içerir:

const unsigned char *key = (unsigned char *)"abcdefghijklmnopqrstuvwxyzabcdef"; 
unsigned char *encrypted_aes_key = rsa_encrypt("public.pem", key); 

Hiçbir dolguya sahip olmayan RSA'nın ilkel RSA şifrelemesi olduğunu ve sonuçtaki görüntünün here olarak görüldüğü gibi 0 ile n (RSA bit boyutu) arasında olduğunu ancak kodumun RSA_PKCS1_PADDING olduğunu biliyorum, bu yüzden neden hala değişken uzunluk çıkışı aldığımı bilmiyorum.)

int result = RSA_public_encrypt(strlen(data), data, encrypted, pub_key, dolgu;:

+0

Yani sonuçta ne elde edersiniz? –

+0

@ EbbeM.Pedersen Her zaman 256 doğru uzunlukta arıyorum. Bununla birlikte, 'şifrelenmiş' değişkeninin uzunluğu değişir. –

cevap

1

şifrelenmiş verilerin uzunluğu ile ilgili result döndürülen

encrypted'da döndürülen şifreli veriler ikili veridir. Üzerinde strlen yapamazsın. Veri 0 sonlandırılmamış ve içinde rastgele bir 0 içerebilir.

+0

Teşekkür ederim. BIO_f_base64() gibi OpenSSL BIO işlevlerini daha fazla kullanım için ikili RSA çıkışını base64 kodlamak için kullanmaya karar verdim. –