Непоследовательный результат длины шифрования RSA - PullRequest
0 голосов
/ 11 января 2019

Я использую внешнюю библиотеку OpenSSL-Universal для шифрования пароля с использованием RSA_PKCS1_PADDING. К сожалению, выходные данные с закодированным символом имеют непоследовательную длину. Допустим, у меня есть 2048-битный модуль, длина результата, которого я ожидаю, равна 128, иначе он не сможет расшифровать обратно в обычный текст.

BIGNUM *xponent = BN_new();
    BIGNUM *modulus = BN_new();
    BN_hex2bn(&xponent,xponentInHex);
    BN_hex2bn(&modulus,modInHex);

    RSA *rsa = RSA_new();
    rsa->e = xponent;
    rsa->n = modulus;
    char encoded[1024] = {0};

    RSA_public_encrypt(
        (int)strlen(charString),// from len
        (const unsigned char *)charString, // from
        (unsigned char *)encoded, // to
        rsa,
        RSA_PKCS1_PADDING
    );

    RSA_free(rsa);
NSLog(@"%lu", strlen(encoded));

если что-то не так с моими орудиями или если у вас есть какое-то объяснение о непоследовательной длине, пожалуйста, дайте мне знать

Ответы [ 2 ]

0 голосов
/ 11 января 2019

Зашифрованный вывод из RSA_public_encrypt - это , а не строка , поэтому вы не можете проверить его длину, используя strlen. Я надеюсь, что вы понимаете, что strlen будет рассматривать любой '\ 0' в вашем зашифрованном выводе как конец строки и будет возвращать количество байтов до этой точки как длину строки. Но зашифрованный буфер может иметь действительные байты, которые могут быть '\ 0'.

Также обратите внимание, что RSA_public_encrypt возвращает длину зашифрованных данных, которые вы должны использовать.

0 голосов
/ 11 января 2019

Вы можете попробовать использовать Objective-C-RSA сторонние библиотеки, или прочитать исходный код и затем реализовать самостоятельно.

...