节点0.12上的加密中的公共加密

时间:2015-03-12 08:34:47

标签: node.js encryption public-key-encryption

我需要使用先前在nodejs中生成的公钥(使用版本0.12,使用版本0.12)使用加密模块加密(和解密)字符串,但我无法执行此操作。

首先我以这种方式生成密钥:

var diffHell = crypto.createDiffieHellman(60);
diffHell.generateKeys('base64');
var publicKey = diffHell.getPublicKey('base64'); //or whatever 'hex','binary'
var privateKey = diffHell.getPrivateKey('base64'); //or whatever 'hex','binary'

然后我尝试使用生成的公钥加密字符串:

crypto.publicEncrypt({key: publicKey}, new Buffer(textToEncrypt));

运行此代码段,节点抛出此错误:

Error: error:0906D06C:PEM routines:PEM_read_bio:no start line
    at Error (native)
    at Object.exports.publicEncrypt (crypto.js:362:18)
    [...]

阅读它,我知道密钥必须采用PEM格式,但我无法在文档中找到如何在PEM中转换公钥。

那么,我怎么能这样做?有人这样做了吗?

2 个答案:

答案 0 :(得分:1)

Diffie-Hellman(密钥交换)是一种基于模运算导出共享密钥的算法和协议。它不像RSA那样是公钥密码。您不能将Diffie-Hellman用于crypto.publicEncrypt()

的Node.js'加密模块没有提供生成公共 - 私有RSA密钥对的方法,因此您需要通过child_process使用OpenSSL或使用提供此类事物的many modules之一(例如{{3} }})。

答案 1 :(得分:0)

您无需使用ursa进行密钥生成。相反,您可以使用openssl生成密钥,然后将生成的PEM密钥存储在您的服务器上并尝试在脚本中加载它们