Public 节点 0.12 上的 crypto 加密
Public encryption in crypto on node 0.12
我需要使用先前在 nodejs(我使用的是 0.12 版本)中生成的 public 密钥加密(和解密)字符串,但我无法做到这一点。
首先我是这样生成密钥的:
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'
然后我尝试使用生成的 public 密钥加密字符串:
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 中转换 public 密钥。
那么,我该怎么做?有人做过吗?
Diffie-Hellman(密钥交换)是一种算法和协议,用于基于模块化算法导出共享秘密。它不是与 RSA 相同的 public 密钥密码。您不能对 crypto.publicEncrypt()
使用 Diffie-Hellman。
Node.js' Crypto 模块不提供生成 public-私有 RSA 密钥对的方法,因此您需要通过 child_process 使用 OpenSSL 或使用以下方法之一many modules which provide this sort of thing (e.g. ursa)。
您不需要使用 ursa 来生成密钥。相反,您可以使用 openssl 生成密钥,然后将生成的 PEM 密钥存储在您的服务器上,并尝试将它们加载到您的脚本中
我需要使用先前在 nodejs(我使用的是 0.12 版本)中生成的 public 密钥加密(和解密)字符串,但我无法做到这一点。
首先我是这样生成密钥的:
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'
然后我尝试使用生成的 public 密钥加密字符串:
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 中转换 public 密钥。
那么,我该怎么做?有人做过吗?
Diffie-Hellman(密钥交换)是一种算法和协议,用于基于模块化算法导出共享秘密。它不是与 RSA 相同的 public 密钥密码。您不能对 crypto.publicEncrypt()
使用 Diffie-Hellman。
Node.js' Crypto 模块不提供生成 public-私有 RSA 密钥对的方法,因此您需要通过 child_process 使用 OpenSSL 或使用以下方法之一many modules which provide this sort of thing (e.g. ursa)。
您不需要使用 ursa 来生成密钥。相反,您可以使用 openssl 生成密钥,然后将生成的 PEM 密钥存储在您的服务器上,并尝试将它们加载到您的脚本中