เข้ารหัสเฉพาะค่าคีย์ json และรับการตอบสนองของวัตถุ json ทั้งหมดด้วยการเข้ารหัสค่าคีย์

เอี่ยมพยายามเข้ารหัสเฉพาะค่าคีย์ของวัตถุ json โดยใช้แอป nodejs ฉันกำลังใช้โมดูลโหนด crypto ฉันจะส่งผ่านวัตถุ json (อาจเป็นแบบพื้นฐานหรือซับซ้อนก็ได้ ภายในค่าที่เราสามารถมีคู่ของค่าคีย์ได้อีกครั้ง) จากนั้นเป็น การตอบสนอง เราควรได้รับ json เดียวกันในรูปแบบเดียวกันกับที่เราให้ไว้ในตอนแรก แต่ค่าคีย์ควรถูกเข้ารหัส ในโค้ดของฉัน ฉันมีฟังก์ชันเข้ารหัสซึ่งจะเข้ารหัสข้อมูล ที่นี่ฉันควรส่งคีย์ค่าไปยังฟังก์ชันเท่านั้น ซึ่งฉันสามารถทำได้และรับข้อมูลที่เข้ารหัสกลับมา ฉันใช้สำหรับแต่ละรายการ เช่น for(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": {"insurer": "john", "cover": "basic" }, "isSplitPayment": ใช่"} จากนั้นบนคอนโซล ฉันจะได้รับ

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

ดังนั้นฉันจึงสามารถเข้าไปข้างในและเข้ารหัสค่าคีย์ได้ .. แต่ตอนนี้สิ่งสำคัญคือฉันต้องการได้รับสิ่งนี้เป็นการตอบกลับในรูปแบบ json เช่น

{"brokerLimit": "51de" "traderType": {"insurer": "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 loop คุณช่วยในเรื่องนี้ได้ไหม - 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