如何使用NodeJS中的公共密钥仅加密JSON有效负载的选定值?

问题描述 投票:0回答:1

样本有效负载:

"object": {
    "a": "bau bau",
    "c": "boo boo",
    "e": "mrau mrau"
  },

加密的有效载荷:

"object": {
    "a": "kjdfhsijry874rhevfbwe",
    "c": "boo boo",
    "e": "vcsafsdkhdlksfhj23273"
  },

我已经创建了以下脚本,但是即使我传递字符串也遇到了错误。错误: 类型错误:第一个参数必须是字符串,Buffer,ArrayBuffer,Array或类似数组的对象。

    const crypto = require('crypto');
    const path = require('path');
    const fs = require('fs');

    const payload = require('./payload.json');
    console.log("original:", payload);

    const encrypted = encryptedJSON(payload, './public.pem', ["a", "e"]);
    console.log("encrypted:", encrypted);

    function encryptedJSON(obj, key, propertiesToEncrypt) {
        let result = { ...obj }; // Clone the object.
        const publicKey = fs.readFileSync(path.resolve(key), "utf8");
        for(let property of propertiesToEncrypt) {
            result[property] = crypto.publicEncrypt({ key: publicKey }, Buffer.from(obj[property], "utf8")).toString("base64");
        }
        return result;
}
javascript node.js public-key-encryption
1个回答
0
投票

您的代码对此payload.json的格式正确:

{
  "a": "bau bau",
  "c": "boo boo",
  "e": "mrau mrau"
}

但是这将失败:

{
  "object": {
    "a": "bau bau",
    "c": "boo boo",
    "e": "mrau mrau"
  }
}

因为它正在尝试加密不存在的顶级属性“ a”(唯一的属性是“对象”)。如果您的有效载荷遵循后一种格式,则可以像这样调整代码:

const encrypted = encryptedJSON(payload.object, './public.pem', ["a", "e"]);
© www.soinside.com 2019 - 2024. All rights reserved.