Я использую библиотеку Openssl, чтобы обеспечить шифрование-дешифрование RSA для моего приложения. И вот что я нашел:
int RSA_private_decrypt(int flen, unsigned char *from,
unsigned char *to, RSA *rsa, int padding);
RSA_private_decrypt () расшифровывает байты flen в из , используя закрытый ключ rsa , и сохраняет открытый текст в - . (Из документов https://www.openssl.org/docs/man1.1.1/man3/RSA_private_decrypt.html)
Для настройки структуры RSA я использую следующий метод:
int RSA_set0_key(RSA *r, BIGNUM *n, BIGNUM *e, BIGNUM *d);
Значения параметров n , e и d можно задать, вызвав RSA_set0_key () и передав новые значения для n , e и d в качестве параметров функции. Значения n и e должны быть ненулевыми при первом вызове этой функции для данного объекта RSA. Значение d может быть равно NULL. (из документов https://www.openssl.org/docs/man1.1.1/man3/RSA_set0_key.html)
Итак, когда я использую вышеприведенный материал для дешифрования , как описано, все работает нормально. Я устанавливаю RSA
struct с n
, e
и d
, затем передаю RSA
struct private_decrypt()
с другими параметрами и получаю правильный результат.
Но если я сделаю not , установите e
в RSA
struct (или установите для нее случайное значение, чтобы избежать ограничения ненулевого значения), private_decrypt()
возвращает неверный результат дешифрования (обычно все нули) .
Так почему же требуется частная расшифровка? Поскольку алгоритм RSA работает, должно быть достаточно иметь n, d и cipher_text, чтобы обеспечить правильный результат, не так ли?