我正在使用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