OpenSSL - Как определить правильную длину зашифрованной строки RSA? - PullRequest
3 голосов
/ 08 ноября 2010

Я использую OpenSSL для шифрования строки.После этого я хочу закодировать зашифрованную строку с помощью алгоритма base64, также используя OpenSSL.Поэтому я обнаружил следующий код: (bit.ly/adUSEw)

char *base64(const unsigned char *input, int length) {
BIO *bmem, *b64;
BUF_MEM *bptr;

b64 = BIO_new(BIO_f_base64());
bmem = BIO_new(BIO_s_mem());
b64 = BIO_push(b64, bmem);
BIO_write(b64, input, length);
BIO_flush(b64);
BIO_get_mem_ptr(b64, &bptr);

char *buff = (char*)malloc(bptr->length);
memcpy(buff, bptr->data, bptr->length - 1);
buff[bptr->length - 1] = 0;

BIO_free_all(b64);

return buff;
}


int main(int argc, char **argv) {

char *message = "TEST";
char *encryptedString = Encrypt(message);

if (encryptedString == NULL) {
    return 0;
}
else {
    char *output = base64(encryptedString, strlen(encryptedString));
    cout << output << endl;
} }

Я заметил, что в этом случае strlen (encryptedString) работает неправильно.Иногда он возвращает правильную длину, но в основном нет.Итак, как правильно определить правильную длину?

1 Ответ

3 голосов
/ 08 ноября 2010

Размер зашифрованного сообщения в точности соответствует размеру модуля в закрытом ключе.Вы должны получить информацию оттуда.

Вы не можете использовать strlen, потому что

  • буфер с зашифрованным сообщением, вероятно, не завершен нулем, и
  • зашифрованное сообщение может содержать (и, вероятно, будет содержать) нулевые байты.
...