我需要帮助来理解nodejs中的以下函数如何处理json,我知道该函数接收一个json主体和一个aes密钥来加密字段:
function encryptAllValuesFromObject(body, key) {
var bodyEnc = __assign({}, body);
var parametersNames = Object.keys(body);
parametersNames.forEach(function (parameter) {
bodyEnc[parameter] = crypto_js_1.AES.encrypt(typeof (body[parameter]) !== 'string' ? JSON.stringify(body[parameter]) : body[parameter], key).toString();
});
return bodyEnc;
}
假设函数接收到以下json,输出应该是什么样的?
{
"origin": {
"typeId": "RUT",
"numberId": "13501153-3",
"accountId": "50010789193",
"productId": "5",
"subProductId": "5-202"
},
"destiny": {
"typeId": "RUT",
"numberId": "12870857-k",
"name": "Prueba",
"email": "[email protected]",
"bankCode": "051",
"bankDesc": "Banco Falabella",
"accountId": "10012461337",
"accountTypeId": "1",
"accountDesc": "Cuenta Corriente"
"isFavourite": true,
"isNewContact": true,
"saveContact": true
},
"subject": "Prueba Transferencia Mobile",
"amount": "1",
"softToken": "123456"
}
该函数需要一个对象(主体)和一个键。
function encryptAllValuesFromObject(body, key) {
__assign
不是标准函数,但我认为它是 Object.assign
的快捷方式,它将一个或多个对象浅复制到第一个对象中。他们将数据从 body 复制到一个空对象中,这样他们就不会更改 body 对象中的数据。
var bodyEnc = __assign({}, body);
Object.keys
从 body 对象中检索所有自己的键并将它们返回到数组中,因此它可以用于迭代键。对于“自己的键”,我指的是对象拥有的属性,而不是原型链中的任何键。
var parametersNames = Object.keys(body);
由于
parametersNames
是一个数组,因此他们使用 forEach
来迭代键,并为每个键调用匿名函数。
parametersNames.forEach(function (parameter) {
现在是时候替换每个参数的
bodyEnc
中的值了。
bodyEnc[parameter] =
它调用函数来加密数据
crypto_js_1.AES.encrypt(
它检查参数是否不是字符串。
typeof (body[parameter]) !== 'string' ?
如果不是字符串,他们会调用
JSON.stringify
将对象转换为字符串(这里有 JSON)。
JSON.stringify(body[参数]) :
如果是字符串,则直接提供给加密函数
body[parameter]
作为加密函数的第二个参数,它们提供密钥 ,键)
并将加密后的数据转换为字符串。
.toString();
});
他们返回带有加密数据的新对象。
return bodyEnc;
}
功能可以简化。不需要以不同的方式处理字符串:只需对所有内容调用 JSON.stingify 即可。它使解密更容易,因为加密时您不再需要知道它是字符串还是对象。
为什么不加密整个对象呢?这样你就不会泄露密钥,并且更容易编码。