Зашифруйте только значение ключа json и получите ответ всего объекта json с зашифрованным значением ключа

Я пытаюсь зашифровать только значение ключа объекта json с помощью приложения nodejs. Я использую модуль криптоузла. Я передам объект json (он может быть базовым или сложным, т.е. внутри значения мы снова можем иметь пару значений ключа), а затем как ответ мы должны получить тот же json в том же формате, который мы дали изначально, но значение ключа должно быть зашифровано. В моем коде у меня есть функция шифрования, которая будет шифровать данные. Здесь я должен только передать значение ключа функции, которую я могу сделать, и вернуть зашифрованные данные. Я использую для каждого, то есть для (var exKey в JsonData) и передачи каждое значение ключа для функции. И снова обрамляя его обратно в формат json, используя этот код.

var JsonData=JSON.parse(req.headers.jsondata);
var enc=null;  
for(var exKey in JsonData) {
var encryptData=encrypt(JsonData[exKey]);
if(enc!= null)
enc= enc+","+ '"'+ exKey+'"'+":"+encryptData;
else
enc="{"+'"'+exKey+'"' +":"+encryptData; 
}
enc=enc+"}";

Это нормально, если мы используем базовый json. Но если мы используем сложный (например, внутри ключ-значение другая пара значений ключа), это не будет работать, так как нам нужно увидеть, есть ли у нас такая функция и итерация. Поэтому я внес изменения в код.

function iterate(JsonData)
{
 for(var exKey in JsonData) {
 if (JsonData.hasOwnProperty(exKey)) {
    if(typeof JsonData[exKey]=="object"){
     console.log('"'+exKey+'"'+":"+"{");
      iterate(JsonData[exKey]);
 }
  else
 {
  var encrypted=encrypt(JsonData[exKey]);
  console.log('"'+exKey+'"'+":"+ '"'+encrypted+'"');
 }

 }
 }
  function encrypt(text){
  var cipher = crypto.createCipher(algorithm,password);
  var crypted = cipher.update(text,'utf8','hex');
  crypted +=cipher.final('hex'); 
  return crypted;
  } 

Теперь, используя функцию, я могу повторить цикл и зашифровать значение ключа, а затем утешить ключ и значение, добавив ",:,{. Например, если я передаю json как:

{"brokerLimit":"50","traderType": {"страховщик":"john","cover":"basic" }, "isSplitPayment":"yes"} Тогда на консоли я получу

"brokerLimit":"51de" "traderType":{ "insurer":"0e81dc9e" "cover":"068fc79922" "isSplitPayment":"1d8bc7"

Итак, я могу войти в цикл и зашифровать значение ключа. Но теперь дело в том, что я хочу получить это как ответ в формате json, т.е.

{"brokerLimit":"51de","traderType": {"страховщик":"0e81dc9e","cover":"068fc79922" }, "isSplitPayment":"1d8bc7"}

Поэтому мне нужно сохранить зашифрованное значение ключа в переменной, также к этому мне нужно добавить ",:,}, чтобы сделать его в формате json. Здесь я столкнулся с проблемой. Если ключ имеет свойство в json, то значение ключа возвращается для функции. В то время я думаю, что нам нужно сохранить во временной переменной, а затем нам нужно добавить к другой глобальной переменной, а затем продолжить добавление к глобальной переменной... Но я не мог исправить логику.. Может кто-нибудь мне помочь в этом .. Надеюсь, мой вопрос понятен. Если не ответить мне.


person H Varma    schedule 23.08.2016    source источник
comment
Из любопытства, что такое algorithm?   -  person zaph    schedule 23.08.2016
comment
Слово, которое вы ищете, - это рекурсия, а не итерация.   -  person Artjom B.    schedule 23.08.2016
comment
Алгоритм @zaph aes   -  person H Varma    schedule 24.08.2016


Ответы (1)


Самый простой способ, вероятно, просто создать новый объект с зашифрованными данными, а затем использовать JSON.stringify(obj) для генерации строки JSON.

person vincent    schedule 23.08.2016
comment
JSON.stringify сработал. Но все же остался с другой проблемой. Я могу зашифровать только строковое значение (т. Е. Только значение внутри). В каждом цикле нам нужно преобразовать все значения ключей в строковый тип и перейти к циклу for, вы можете помочь в этом. - person H Varma; 25.08.2016
comment
Вы также можете использовать JSON.stringify() для этого, но неопределенное значение приведет к неопределенному результату. Вы также можете указать функцию в качестве второго аргумента для конкретной обработки. См. developer.mozilla.org/en-US. /docs/Web/JavaScript/Reference/ для справки. В вашем случае, вероятно, лучше использовать JSON.stringify для всего объекта, а затем зашифровать его. Чтобы восстановить объект, расшифруйте строку, а затем используйте для нее JSON.parse. - person vincent; 26.08.2016