使用公钥进行RSA加密。基于密钥的数据大小

时间:2013-07-19 12:37:51

标签: c++ openssl size rsa

我正在使用OpenSSL RSA API使用服务器的公钥加密数据。

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应该可以轻松地使用256字节公钥来保存255个字节。但我收到了这个:

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可以使用256键编码255个字节。有什么问题?

1 个答案:

答案 0 :(得分:3)

你在错误的一端填充。如果你有255个字节的数据,并且想要将其填充到256,那么你应该在高阶端的零字节。换句话说,你应该在d [0]之前插入一个0。