我需要使用公钥(pem文件)对字符串进行加密,然后使用私钥(也是pem)对其进行签名。使用公钥在node.js中加密数据
我加载了PEM文件罚款:
publicCert = fs.readFileSync(publicCertFile).toString();
但谷歌淘了几个小时之后,我似乎无法找到一种方法使用公钥来加密数据。在PHP中,我只需调用openssl_public_encrypt,但在节点或任何模块中都看不到相应的函数。
如果有人有任何建议,请告诉我。
我需要使用公钥(pem文件)对字符串进行加密,然后使用私钥(也是pem)对其进行签名。使用公钥在node.js中加密数据
我加载了PEM文件罚款:
publicCert = fs.readFileSync(publicCertFile).toString();
但谷歌淘了几个小时之后,我似乎无法找到一种方法使用公钥来加密数据。在PHP中,我只需调用openssl_public_encrypt,但在节点或任何模块中都看不到相应的函数。
如果有人有任何建议,请告诉我。
没有图书馆需要的朋友将来的文档,
输入crypto
这里是你可以用它来与RSA密钥加密/解密字符串一个janky的小模块:
var crypto = require("crypto");
var path = require("path");
var fs = require("fs");
var encryptStringWithRsaPublicKey = function(toEncrypt, relativeOrAbsolutePathToPublicKey) {
var absolutePath = path.resolve(relativeOrAbsolutePathToPublicKey);
var publicKey = fs.readFileSync(absolutePath, "utf8");
var buffer = new Buffer(toEncrypt);
var encrypted = crypto.publicEncrypt(publicKey, buffer);
return encrypted.toString("base64");
};
var decryptStringWithRsaPrivateKey = function(toDecrypt, relativeOrAbsolutePathtoPrivateKey) {
var absolutePath = path.resolve(relativeOrAbsolutePathtoPrivateKey);
var privateKey = fs.readFileSync(absolutePath, "utf8");
var buffer = new Buffer(toDecrypt, "base64");
var decrypted = crypto.privateDecrypt(privateKey, buffer);
return decrypted.toString("utf8");
};
module.exports = {
encryptStringWithRsaPublicKey: encryptStringWithRsaPublicKey,
decryptStringWithRsaPrivateKey: decryptStringWithRsaPrivateKey
}
我建议在可能情况下使用同步fs的方法,你可以使用的承诺,使这更好的,但对于简单的使用案例这是我看到的工作方法,并将采取
node-rsa module这个怎么样?这是一个链接到test.js file that demonstrates usage。
也许我需要更熟悉RSA加密。我十几次阅读加密文档,试图看看如何去做我需要的东西,但我没有找到任何东西。 你说的createCipheriv()会做我需要的,但我甚至不知道“iv”是什么。我想这是因为它在PHP和其他语言中更抽象。我会玩这个功能,看看我能不能把它工作。 – Clint 2012-01-06 07:15:42
在阅读了关于createCipheriv的更多信息之后,它看起来并不是非对称加密(公钥/私钥加密)。我不认为这会满足我的需求。加密确实有能力使用私钥对加密的字符串进行签名,这让我想知道为什么我无法使用公钥进行加密。看起来很奇怪,否则我完全错过了一些东西。 – Clint 2012-01-06 07:25:35
iv是一个初始化函数。 http://en.wikipedia.org/wiki/Initialization_vector – 2012-01-06 14:43:27
更新的公共/私人解密和加密模块是URSA。 node-rsa模块已过时。
该节点模块为OpenSSL的RSA公钥/私钥密码功能提供了一套相当完整的包装。
NPM安装大熊
熊族长久以来一直没有维持。这些较新的实现可能有所帮助:https://github.com/tracker1/cryptico-js和https://github.com/rzcoder/node-rsa – 2014-08-20 01:34:25
TL; DR:小熊座是你最好的选择。它真的很时髦,这不符合节点加密标准。
我发现的每个其他解决方案都不能在Windows中工作,或者实际上不是加密库。由路易推荐的大熊看起来是最好的选择。如果你不关心窗户,你更加黄金。关于Ursa,我必须安装Open SSL以及一些名为“Visual C++ 2008 Redistributables”的东西,才能使npm install正常工作。这里获取的垃圾:http://slproweb.com/products/Win32OpenSSL.html
细目:
这是字面上我能找到的。
node-rsa不再依赖节点waf。它是浏览器兼容的。 – 131 2015-09-03 06:52:33
节点版本v0.11.13或更低版本本身不支持此功能,但似乎下一个版本的节点(a.k.a v0.12)将支持此功能。
这里是线索:https://github.com/joyent/node/blob/v0.12/lib/crypto.js#L358
看到crypto.publicEncrypt
和crypto.privateDecrypt
这对我的作品......这是更好地融入本土... – ATOzTOA 2016-06-07 21:43:23
感谢编辑@uzyn – 2016-09-13 02:53:09
感谢您的解决方案@JacobMcKay救了我一两个小时。 – uzyn 2016-09-13 06:18:07