我需要使用先前在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中转换公钥。
那么,我怎么能这样做?有人这样做了吗?
答案 0 :(得分:1)
Diffie-Hellman(密钥交换)是一种基于模运算导出共享密钥的算法和协议。它不像RSA那样是公钥密码。您不能将Diffie-Hellman用于crypto.publicEncrypt()
。
的Node.js'加密模块没有提供生成公共 - 私有RSA密钥对的方法,因此您需要通过child_process使用OpenSSL或使用提供此类事物的many modules之一(例如{{3} }})。
答案 1 :(得分:0)
您无需使用ursa进行密钥生成。相反,您可以使用openssl生成密钥,然后将生成的PEM密钥存储在您的服务器上并尝试在脚本中加载它们