Крипто Node.js кажется несовместимым с Openssl C ++ - PullRequest
0 голосов
/ 28 апреля 2018

Я бьюсь головой, слышу какое-то время. У меня есть двухстороннее рукопожатие RSA между клиентом c ++ и сервером node.js с использованием модуля crypto. Node.js - версия 8.

В любом случае на стороне c ++ у нас есть код, который делает следующее:

// c++_cipher -> node.js
RSA_public_encrypt(
            payloaddump.length(),
            (const unsigned char*)payloaddump.c_str(),
            (unsigned char *)cipher,
            clusterpub,
            RSA_PKCS1_OAEP_PADDING
        );

И узел правильно расшифрует его на своей стороне с помощью своего закрытого ключа ..

// node.js <- c++_cipher
return crypto.privateDecrypt(pem, Buffer.from(payload, 'base64')).toString()

Однако, когда я загружаю общедоступный сертификат c ++ для клиента на конце node.js и шифрую некоторую полезную нагрузку ...

// Node.js -> c++
return crypto.publicEncrypt(cpp_pub, Buffer.from(data), crypto.constants.RSA_PKCS1_OAEP_PADDING)

и расшифровать на стороне c ++ как:

// c++ <- node.js cipher
int rsapemsize = RSA_size(mypem);
RSA_private_decrypt(
                    rsapemsize,
                    node_cipher,
                    plain,
                    mypem,
                    RSA_PKCS1_OAEP_PADDING
                );

Я получаю следующую ошибку RSA:

error:04065072:rsa routines:rsa_ossl_private_decrypt:padding check failed

Я не понимаю, почему node.js может расшифровывать, а c ++ - нет. Я проверил свой паб, пары ключей Pem миллион раз, и они верны. Я также хочу заявить, что crypto node.js выглядит так, как будто он напрямую связывается с библиотеками openssl c ++, поэтому он должен использовать ту же библиотеку? Это также похоже на реализацию той же схемы хеширования + mgf1 ... однако узел использует методы EVP ... не RSA_public_encrypt, хотя это не должно иметь значения. Не уверен, смогу ли я изменить это на стороне Node или openssl. Я что-то упустил?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...