Как зашифровать только выбранные значения полезной нагрузки JSON с помощью ключа publi c в NodeJS? - PullRequest
0 голосов
/ 26 марта 2020

пример полезной нагрузки:

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

зашифрованная полезная нагрузка:

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

Я создал следующий скрипт, но получаю сообщение об ошибке, даже если я передаю строку. ОШИБКА: Ошибка типа: первый аргумент должен быть строкой, буфером, массивом, массивом или массивоподобным объектом.

    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;
}

1 Ответ

0 голосов
/ 26 марта 2020

Ваш код является правильным для этого формата payload.json:

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

Но не удастся для этого:

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

Поскольку он пытается зашифруйте свойство верхнего уровня «а», которое не существует (единственное свойство - «объект»). Если ваша полезная нагрузка соответствует последнему формату, вы можете настроить свой код следующим образом:

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