Node.js加密似乎与Openssl c ++不兼容

时间:2018-04-27 22:11:00

标签: c++ node.js encryption openssl

我一直在敲我的脑袋听一会儿。我使用crypto模块在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()

但是,当我在node.js端加载客户端的c ++公共证书并加密某些有效负载时......

// 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密钥对一百万次,他们是正确的。我还想声明node.js crypto看起来像是直接绑定到openssl c ++ libs,所以应该使用相同的库?它看起来像实现相同的哈希+ mgf1方案...但是节点使用EVP方法...而不是RSA_public_encrypt虽然它应该无关紧要。不确定我是否可以在Node或openssl端更改它。我错过了什么吗?

0 个答案:

没有答案