我正在使用OpenSSL RSA API使用服務器的公鑰加密數據。使用公鑰進行RSA加密。基於密鑰的數據大小
uint32_t rsasize = RSA_size(keypair); // -- RSA key size == 256
uint32_t dl = 255
uint8_t *d; // points to 255 bytes of data
unsigned char *encrypt = (unsigned char*)malloc(rsasize);
auto num = RSA_public_encrypt(dl, d, encrypt, keypair, RSA_NO_PADDING);
if (num == -1)
{
auto err = malloc(130);
ERR_load_crypto_strings();
ERR_error_string(ERR_get_error(), (char*)err);
printf("Error encrypting message: %s\n", err);
return nullptr;
}
我使用RSA_NO_PADDING
因此RSA應該很容易隱窩255個字節,256字節的公鑰。不過,我收到這樣的:
Error encrypting message: error:0406B07A:rsa routines:RSA_padding_add_none:data too small for key size
我改變DL(data_lenght)到256(只+1),我得到這個:
Error encrypting message: error:04068084:rsa routines:RSA_EAY_PUBLIC_ENCRYPT:data too large for modulus
我知道,RSA可以編碼255個字節256-鍵。有什麼問題?
您可能想要使用填充。但是如果你不使用填充,你會覺得'dl == rsasize'。我會驗證'rsasize'是你認爲它對你的配對。 – huskerchad
我不能使用填充,因爲我想用256個密鑰編碼255個字節。填充將限制最大長度的數據(它只適用於dl <= 245字節,我只是不記得填充大小)。如果我使用dl == rsasize(256),則會收到rsa例程:RSA_EAY_PUBLIC_ENCRYPT:數據對模數來說太大。根據RSA_size(密鑰對) – Jura
根據RSA_size()模塊大小以字節爲單位,它可以用來確定必須爲RSA加密值分配多少內存。「* – jww