【发布时间】:2020-03-26 19:47:49
【问题描述】:
样本负载:
"object": {
"a": "bau bau",
"c": "boo boo",
"e": "mrau mrau"
},
加密的有效载荷:
"object": {
"a": "kjdfhsijry874rhevfbwe",
"c": "boo boo",
"e": "vcsafsdkhdlksfhj23273"
},
我创建了以下脚本,但即使我正在传递字符串,也会出现错误。 错误: TypeError:第一个参数必须是字符串、缓冲区、ArrayBuffer、数组或类似数组的对象。
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;
}
【问题讨论】:
-
而且,如果您在该行之前
console.log(obj)?从您的问题中不清楚这些变量中的实际内容。你说"object": {}暗示有一个外部对象,其中有一个名为object的键,这肯定会破坏事情。 -
您的代码看起来是正确的 - 我在本地复制并运行它并且它有效。我在 MacOS 上使用节点 v12.14.0。
标签: javascript node.js public-key-encryption