C++ Node.js crypto似乎与Openssl c++;

C++ Node.js crypto似乎与Openssl c++;,c++,node.js,encryption,openssl,C++,Node.js,Encryption,Openssl,我磕头听了有一阵子了。我使用密码模块在C++客户端和NoDE.JS服务器之间进行RSA双向握手。Node.js是版本8 无论如何,C++端的代码如下: // c++_cipher -> node.js RSA_public_encrypt( payloaddump.length(), (const unsigned char*)payloaddump.c_str(), (unsigned char *)cipher,

我磕头听了有一阵子了。我使用密码模块在C++客户端和NoDE.JS服务器之间进行RSA双向握手。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++侧解密为:

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

我不明白为什么No.js能够解密,但是C++不能。我已经检查了我的pub、pem密钥对一百万次,它们都是正确的。我还想说明NoDE.js加密看起来像是直接绑定到OpenSSL C++ LIBS,所以它应该使用同一个库吗?它看起来还实现了相同的哈希+mgf1方案。。。但是,节点使用EVP方法。。。不是RSA\u public\u加密,尽管这不重要。不确定我是否可以在节点或openssl端更改它。我遗漏了什么吗?

不知道怎么回事,我删除了另一个问题。只需使用HTTPS即可。@zaph这不是一个正常的web服务。这是在https之上使用的。
// c++ <- node.js cipher
int rsapemsize = RSA_size(mypem);
RSA_private_decrypt(
                    rsapemsize,
                    node_cipher,
                    plain,
                    mypem,
                    RSA_PKCS1_OAEP_PADDING
                );
error:04065072:rsa routines:rsa_ossl_private_decrypt:padding check failed