首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >节点-rsa和openssl兼容性

节点-rsa和openssl兼容性
EN

Stack Overflow用户
提问于 2015-03-17 12:22:09
回答 1查看 3K关注 0票数 5

我有一组公钥/私钥,在使用两种加密和解密方式中的一种加密/解密某些数据时,它的工作原理是完美无缺的。

我仍然没有运气,试图加密的数据与其中一个,并与另一个解密。

例如schenario:

a)我使用以下node.js代码使用公钥创建了一些加密数据:

代码语言:javascript
复制
#!/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实用程序解密它,如下所示:

代码语言:javascript
复制
node test.js | openssl base64 -d -A | openssl rsautl -inkey id_rsa

但我明白:

代码语言:javascript
复制
RSA operation error
1068:error:0406706C:rsa routines:RSA_EAY_PUBLIC_DECRYPT:data greater than mod len:.\crypto\rsa\rsa_eay.c:680:

我认为他们可能会在加密/解密过程中使用不同的算法,所以我在这里转到节点-rsa文档:https://www.npmjs.com/package/node-rsa和我找到了这个选项:

encryptionScheme -加密/解密的填充方案。可以是“pkcs1_oaep”或“pkcs1 1”。默认的'pkcs1_oaep‘。

然后,我试图解密openssl中的-oaep选项,如下所示:

代码语言:javascript
复制
node test.js | openssl base64 -d -A | openssl rsautl -oaep -inkey id_rsa

但我还是明白:

代码语言:javascript
复制
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模块可以在这里找到:https://github.com/rzcoder/node-rsa

编辑2:根据Maarten Bodewes的要求,下面是一些示例数据:

待加密的明文数据:

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

生成的私钥

代码语言:javascript
复制
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-----

与其等价的发布密钥

代码语言:javascript
复制
openssl rsa -in key -pubout > key.pub

-----BEGIN PUBLIC KEY-----
MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALOUBygyX11BsDoEIKoZzn2/HAXPorNR
/X8wCDaBlcPtOHxKAZFkVra1+Pem1urtSlnEqc07DwAP6v0GEGHpxbkCAwEAAQ==
-----END PUBLIC KEY-----

使用node.js rsa库使用给定公钥加密的上述明文数据:

代码语言:javascript
复制
nbp1tBlcev9PvD3xDmEQkcBd8ewNxW8Xm7oZWVcsFika3dU/H3VFoxdeH75DPy4/xLvN1Gxqfb/bXTnfKZLZBYV1q4XfmR4p3ji41MAybpMiEl5h4fSFYacg5SiQ/KxxmQr0SLs4rttwcbaGBLG6rcIU+6SSYBYu1GhC+XBlBG94zbqFV9ZvohEbnlnqDDW1Kg9hGT9/vBBtiLEQnTiKDwztIgY3DhqadsVW0g37PFFwuQKXtHw/lQqrRhc+Pb03g+Oq8nIpX8eaurL8lo3lZNkhlY4NfFCYwP7v12MYwSrMeWPMe20LDDQ6NXbJnrsLGl5x08aYn7liS5qsYdtqRpYv+JbJc3EoXIZEyHv17gU1R0OmLsSd/Teln9VAvM+jt4jwQjlvE1WF8g9Qc/WNo28RR4KaNOvUpLDwfuc3gTgkG90ac8EchmKB3LAgU47kQComyphuPAI/G4phqeXOeYnbBrB1aqwxAkAwOIvanGjCY6FXlV8Cve1jao0ejQ0EFE1180yjhltgh5U2EErQLDd5S4y5YLbLz4xIiKo3k06Yktk4dSJsBalHPxi7Z+kofjT3KdeHyGMynodGzOmH5CaAAS2enZpp2VytcawlDu84EvrPYIRPWah9cA6dtxARx6us8EytrNIDv7UVGXw/cQEPR1nZamz6HROqT4Fpwfc=
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-17 16:32:15

只需为openssl添加-decrypt参数

代码语言:javascript
复制
node test.js | openssl base64 -d -A | openssl rsautl -decrypt -oaep -inkey id_rsa

对我来说很不错。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29098963

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档