คำนำ
ฉันได้เขียนบทนำเกี่ยวกับการเข้ารหัสและการถอดรหัสเนื้อหาการกำหนดค่าของศูนย์การกำหนดค่า: "สปริงคลาวด์สร้างสถาปัตยกรรม Microservice: ศูนย์การกำหนดค่าแบบกระจาย (การเข้ารหัสและถอดรหัส)" ในบทความนี้มีปัญหา: เมื่อเนื้อหาที่เข้ารหัสมีอักขระพิเศษบางอย่างเช่น = และ +เมื่อใช้คำสั่ง curl localhost:7001/encrypt -d ที่กล่าวถึงในบทความก่อนหน้านี้เพื่อเข้ารหัสและถอดรหัสอักขระพิเศษจะหายไป
ตัวอย่างเช่นสถานการณ์ต่อไปนี้:
$ CURL LOCALHOST: 7001/Encrypt -D EF34+5EDO = A34C76C4DDAB706FBCAE0848639A8E0ED9D612B0035030542C98997E084A7427 $ A34C76C4DDAB706FBCAE0848639A8E0ED9D612B0035030542C98997E084A7427EF34 5EDO
จะเห็นได้ว่าหลังจากการเข้ารหัสและถอดรหัสตัวละครพิเศษบางตัวจะหายไป เนื่องจากฉันมีเคล็ดลับเล็กน้อยที่นี่ก่อนหน้านี้ฉันใช้เวลาในการเขียนและแบ่งปัน ฉันหวังว่ามันจะเป็นประโยชน์กับคุณถ้าฉันพบปัญหาเดียวกัน
สาเหตุและการแก้ไขปัญหา
ในความเป็นจริงเหตุผลของปัญหานี้มีการอธิบายโดยเฉพาะในเอกสารอย่างเป็นทางการ ฉันสามารถตำหนิตัวเองได้เพียงแค่ประมาทเกินไป รายละเอียดมีดังนี้:
หากคุณกำลังทดสอบเช่นนี้กับ Curl ให้ใช้-Data-Urlencode (แทนที่จะเป็น -d) หรือตั้งค่าประเภทเนื้อหาที่ชัดเจน: ข้อความ/ธรรมดาเพื่อให้แน่ใจว่า Curl เข้ารหัสข้อมูลอย่างถูกต้องเมื่อมีอักขระพิเศษ ('+' เป็นเรื่องยากโดยเฉพาะ)
ดังนั้นเมื่อใช้ม้วนงอท่าที่ถูกต้องควรเป็น:
$ CURL LOCALHOST: 7001/Encrypt -H 'ประเภทเนื้อหา: ข้อความ/plain'-Data-Urlencode "EF34+5EDO =" 335E618A02A0FF3DC1377321885F484FB2C19A49423 LocalHost: 7001/DECRYPT -H 'ประเภทเนื้อหา: ข้อความ/ธรรมดา'-ข้อมูล-Urlencode "335E618A02A0FF3DC1377321885F484FB2C19A499423EE777777755B8759999997B033
ดังนั้นเราจะเล่นได้อย่างไรเมื่อเราเขียนเครื่องมือเพื่อเข้ารหัสและถอดรหัส? นี่คือตัวอย่างของ OKHTTP สำหรับการอ้างอิง:
การเข้ารหัสสตริงส่วนตัว (ค่าสตริง) {string url = "http: // localhost: 7001/encrypt"; คำขอคำขอ = new Request.builder () .url (url) .post (requestbody.create (mediaType.parse ("ข้อความ/ธรรมดา"), value.getBytes ()))) .build (); การโทร = okhttpClient.newCall (คำขอ); การตอบสนองการตอบสนอง = call.execute (); ResponseBody ResponseBody = Response.body (); return ResponseBody.string ();} การถอดรหัสสตริงส่วนตัว (ค่าสตริง) {string url = "http: // localhost: 7001/decrypt"; คำขอคำขอ = new Request.builder () .url (url) .post (requestbody.create (mediaType.parse ("ข้อความ/ธรรมดา"), value.getBytes ()))) .build (); การโทร = okhttpClient.newCall (คำขอ); การตอบสนองการตอบสนอง = call.execute (); ResponseBody ResponseBody = Response.body (); return responsebody.string ();}สรุป
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่าเนื้อหาของบทความนี้จะมีค่าอ้างอิงบางอย่างสำหรับการศึกษาหรือที่ทำงานของทุกคน หากคุณมีคำถามใด ๆ คุณสามารถฝากข้อความไว้เพื่อสื่อสาร ขอบคุณสำหรับการสนับสนุน Wulin.com