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;:
Yani sonuçta ne elde edersiniz? –
@ EbbeM.Pedersen Her zaman 256 doğru uzunlukta arıyorum. Bununla birlikte, 'şifrelenmiş' değişkeninin uzunluğu değişir. –