node-rsa和openssl的兼容性

我有一套公钥/私钥,当使用encryption和解密两种方式中的一种对一些数据进行encryption/解密时,它是完美无瑕的。

我仍然没有试图用两者之一encryption数据,并用另一个解密。

示例schenario:

a)我使用下面的node.js代码使用公钥创build一些encryption的数据:

#!/usr/bin/env node var NodeRSA = require('node-rsa'); var fs = require('fs'); function createUsingPubKey(Pub, data) { var pk = new NodeRSA(); pk.importKey(Pub); encrypted = pk.encrypt(data, 'base64'); return encrypted; } var sampledata = "SECRET STUFF"; var genkey = createUsingPubKey(fs.readFileSync('id_rsa.pub'), sampledata) console.log(genkey); 

b)然后我尝试使用openssl实用程序解密它:

 node test.js | openssl base64 -d -A | openssl rsautl -inkey id_rsa 

但是我得到:

 RSA operation error 1068:error:0406706C:rsa routines:RSA_EAY_PUBLIC_DECRYPT:data greater than mod len:.\crypto\rsa\rsa_eay.c:680: 

我以为他们可能会使用不同的algorithm进行encryption/解密过程,所以我前往这里的节点rsa文档: https : //www.npmjs.com/package/node-rsa ,我发现这个选项:

encryptionScheme – 用于encryption/解密的填充scheme。 可以是“pkcs1_oaep”或“pkcs1”。 默认的“pkcs1_oaep”。

然后我尝试在openssl util中解密传递-oaep选项,如下所示:

 node test.js | openssl base64 -d -A | openssl rsautl -oaep -inkey id_rsa 

但我仍然得到:

 RSA operation error 5216:error:0406706C:rsa routines:RSA_EAY_PUBLIC_DECRYPT:data greater than mod len:.\crypto\rsa\rsa_eay.c:680: 

我对密码学的知识是非常基础的。 任何帮助,将不胜感激 :)

编辑1:node.js模块可以在这里find: https : //github.com/rzcoder/node-rsa

编辑2:作为马滕Bodewes要求,这里是一些示例数据:

要encryption的明文数据:

你不好,你不好,你不好,宝贝,你不好(我要再说一遍)你不好,你不好,你不好宝贝,你不好

一个私钥生成

 openssl genrsa -out key 512 -----BEGIN RSA PRIVATE KEY----- MIIBOgIBAAJBALOUBygyX11BsDoEIKoZzn2/HAXPorNR/X8wCDaBlcPtOHxKAZFk Vra1+Pem1urtSlnEqc07DwAP6v0GEGHpxbkCAwEAAQJAGAZ17qrOl2tyaFClDhzl w20OErj0y4jsoVeLwb8UimG48JslS14hfM9XxE/fG6qypN8u7LUhlnBC68ZcQ9Jg AQIhAORaVlB7trWp6n7dETvdY9J2p8ubOuyLTX0BA2jF8agxAiEAyVHzDWQPWx/s gt+ABErqN+ZUWS016DD34QUVGyp9nAkCIQC39JpSDcd7gx1YA8jNXCT9N/8mg6+t PO84g2d2sPdjEQIgXwWMF/TzfopJ4tfFH8GQXYQcqd66A/cg+Jeih6j9kqkCIGD4 hBAO0haqnqeSO65Mm1IjY/6Z77pKxzJAGys5XeXk -----END RSA PRIVATE KEY----- 

和它的等价的酒吧钥匙

 openssl rsa -in key -pubout > key.pub -----BEGIN PUBLIC KEY----- MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALOUBygyX11BsDoEIKoZzn2/HAXPorNR /X8wCDaBlcPtOHxKAZFkVra1+Pem1urtSlnEqc07DwAP6v0GEGHpxbkCAwEAAQ== -----END PUBLIC KEY----- 

上面使用node.js rsa库使用给定公钥encryption的明文数据:

 nbp1tBlcev9PvD3xDmEQkcBd8ewNxW8Xm7oZWVcsFika3dU/H3VFoxdeH75DPy4/xLvN1Gxqfb/bXTnfKZLZBYV1q4XfmR4p3ji41MAybpMiEl5h4fSFYacg5SiQ/KxxmQr0SLs4rttwcbaGBLG6rcIU+6SSYBYu1GhC+XBlBG94zbqFV9ZvohEbnlnqDDW1Kg9hGT9/vBBtiLEQnTiKDwztIgY3DhqadsVW0g37PFFwuQKXtHw/lQqrRhc+Pb03g+Oq8nIpX8eaurL8lo3lZNkhlY4NfFCYwP7v12MYwSrMeWPMe20LDDQ6NXbJnrsLGl5x08aYn7liS5qsYdtqRpYv+JbJc3EoXIZEyHv17gU1R0OmLsSd/Teln9VAvM+jt4jwQjlvE1WF8g9Qc/WNo28RR4KaNOvUpLDwfuc3gTgkG90ac8EchmKB3LAgU47kQComyphuPAI/G4phqeXOeYnbBrB1aqwxAkAwOIvanGjCY6FXlV8Cve1jao0ejQ0EFE1180yjhltgh5U2EErQLDd5S4y5YLbLz4xIiKo3k06Yktk4dSJsBalHPxi7Z+kofjT3KdeHyGMynodGzOmH5CaAAS2enZpp2VytcawlDu84EvrPYIRPWah9cA6dtxARx6us8EytrNIDv7UVGXw/cQEPR1nZamz6HROqT4Fpwfc= 

只需添加openssl的-decrypt参数

 node test.js | openssl base64 -d -A | openssl rsautl -decrypt -oaep -inkey id_rsa 

对我来说相当不错