2

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_length) を 256 (ちょうど +1) に変更したところ、次のようになりました。

Error encrypting message: error:04068084:rsa routines:RSA_EAY_PUBLIC_ENCRYPT:data too large for modulus

RSAは256キーで255バイトをエンコードできることを知っています。どうしたの?

4

1 に答える 1

4

あなたは間違った端にパディングしています。255 バイトのデータがあり、それを 256 バイトまで埋めたい場合は、上位の末尾に0 バイトを追加する必要があります。つまり、d[0] の直前に 0 を挿入する必要があります。

于 2013-07-20T13:04:30.460 に答える