一尘不染

使用node.js中的公钥加密数据

node.js

我需要使用公钥(pem文件)对字符串进行加密,然后使用私钥(也为pem)对其进行签名。

我正在加载pem文件:

publicCert = fs.readFileSync(publicCertFile).toString();

但是经过数小时的搜索,我似乎无法找到一种使用公钥加密数据的方法。在php中,我只是调用openssl_public_encrypt,但在节点或任何模块中都看不到任何相应的功能。

如果有人有任何建议,请告诉我。


阅读 251

收藏
2020-07-07

共1个答案

一尘不染

没有图书馆必要的朋友,

输入密码

这是一个简单的小模块,可用于使用RSA密钥加密/解密字符串:

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 = Buffer.from(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 = Buffer.from(toDecrypt, "base64");
    var decrypted = crypto.privateDecrypt(privateKey, buffer);
    return decrypted.toString("utf8");
};

module.exports = {
    encryptStringWithRsaPublicKey: encryptStringWithRsaPublicKey,
    decryptStringWithRsaPrivateKey: decryptStringWithRsaPrivateKey
}

我建议不要在可能的情况下使用同步fs方法,并且可以使用Promises使其变得更好,但是对于简单的用例,这是我见过的方法并且会采用

2020-07-07