เข้ารหัสข้อมูลอ่อนไหวใน ASP.NET

ยุคที่แฮกเกอร์ชุกชุม มิจฉาชีพมากมาย โปรแกรมอัปมงคลเข้าปลอมปน หน่วยงานรัฐและเอกชนปล่อยข้อมูลผู้ลงทะเบียนรั่วไหล ฯลฯ เหตุการณ์เหล่านี้มีแต่จะรุนแรงขึ้นทุกวัน ในบทความนี้ 9Expert Training จึงจะสอนวิธีเข้ารหัสข้อมูลเพื่อการรักษาความปลอดภัย เทคนิคจำเป็นสำหรับผู้พัฒนาเว็บแอพแบบ ASP.NET เพื่อป้องกันผู้ไม่หวังดีนำข้อมูลที่อ่อนไหวไปแสวงหาผลประโยชน์ แสดงตัวอย่างเป็นโค้ดภาษา C# เข้ารหัสด้วยอัลกอริทึมแบบ AES (Advanced Encryption Standard) ที่เสริมความปลอดภัยให้แอพที่ใช้โปรโตคอล HTTPS ขึ้นไปอีกระดับ
เข้ารหัสข้อมูลอ่อนไหวใน ASP.NET

เข้ารหัสข้อมูลอ่อนไหวใน ASP.NET

ยุคที่แฮกเกอร์ชุกชุม มิจฉาชีพมากมาย โปรแกรมอัปมงคลเข้าปลอมปน หน่วยงานรัฐและเอกชนปล่อยข้อมูลผู้ลงทะเบียนรั่วไหล ฯลฯ เหตุการณ์เหล่านี้มีแต่จะรุนแรงขึ้นทุกวัน ในบทความนี้  9Expert Training  จึงจะสอนวิธีเข้ารหัสข้อมูลเพื่อการรักษาความปลอดภัย เทคนิคจำเป็นสำหรับผู้พัฒนาเว็บแอพแบบ ASP.NET เพื่อป้องกันผู้ไม่หวังดีนำข้อมูลที่อ่อนไหวไปแสวงหาผลประโยชน์ แสดงตัวอย่างเป็นโค้ดภาษา C# เข้ารหัสด้วยอัลกอริทึมแบบ AES (Advanced Encryption Standard) ที่เสริมความปลอดภัยให้แอพที่ใช้โปรโตคอล HTTPS ขึ้นไปอีกระดับ โดยจะแสดงตัวอย่างสองการประยุกต์ใช้งานได้แก่
 

  1. วิธีเข้ารหัสข้อมูลบัตรเครดิตก่อนบันทึกลงฐานข้อมูล
  2. วิธีเข้ารหัส HTTPS Query String (คิวรีสตริงก์)

เครื่องมือที่ใช้ในบทความ

การสร้างเว็บแอพแบบ ASP.NET ในบทความนี้ 9Expert Training  จะแสดงวิธีทำโดยใช้เครื่องมือเพียงอย่างเดียวคือ Visual Studio เวอร์ชัน 2022 อัพเดตใหม่สุดอิดิชันฟรี (community edition) ที่มาพร้อม .NET 8.0 หรือท่านจะใช้อิดิชันอื่นก็ได้
 

วิธีดาวน์โหลดซอร์สโค้ด

บทความนี้แสดงโค้ดเป็นภาษา C# และ HTML ท่านสามารถป้อนพิมพ์โค้ดตามได้ไม่ยาก แต่ถ้าท่านไม่อยากพิมพ์ หรือท่านต้องการซอร์สโค้ดที่สมบูรณ์ทั้งหมดมาทดลองรันดูเพื่อตรวจสอบความถูกต้อง ก็สามารถดาวน์โหลดได้จากลิงค์นี้
https://github.com/laploy/files/blob/master/AspAes.zip
ภายในไฟล์ AspAes.zip ประกอบด้วยโซลูชันของวิสชวลสตูดิโอสองโซลูชัน ได้แก่

  1. LoyEncryptDbSol: แสดงตัวอย่างการใช้อัลกอริทึม AES เพื่อเข้ารหัสข้อมูลก่อนบันทึกลงฐานข้อมูล
  2. LoyEncryptQuerySol: แสดงตัวอย่างการใช้อัลกอริทึม AES เพื่อเข้าและถอดรหัสคิวรีสตริงก์

เมื่อดาวน์โหลดและแตกไฟล์ออกแล้ว ท่านสามารถเปิดด้วยโปรแกรมวิสชวลสตูดิโอเพื่อลองรันได้ทันที
 

เพราะอะไรจึงต้องเข้ารหัสข้อมูล

เพราะผู้ไม่หวังดีสามารถดักจับและอ่านข้อมูลที่ถูกส่งผ่านเครือข่ายได้ ดังนั้นเว็บแอพที่เกี่ยวข้องกับข้อมูลที่อ่อนไหว จึงควรมีกลไกรักษาความปลอดภัยต่าง ๆ เพื่อ

  • ป้องกันการเข้าถึงโดยไม่ได้รับอนุญาต: หากข้อมูลถูกส่งผ่านเครือข่ายโดยไม่เข้ารหัส (เช่น รหัสผ่านหรือ API key) ผู้ไม่หวังดีสามารถดักจับและอ่านข้อมูลได้ง่าย
  • รักษาความลับของผู้ใช้: การเข้ารหัสช่วยให้ข้อมูลส่วนตัว เช่น ชื่อ, อีเมล, หรือหมายเลขบัตรเครดิต ไม่สามารถถูกเปิดเผยได้ แม้ข้อมูลจะถูกดักจับไว้ได้ระหว่างทาง
  • เพิ่มความน่าเชื่อถือของระบบ: ผู้ใช้จะรู้สึกปลอดภัยมากขึ้นเมื่อรู้ว่าข้อมูลของพวกเขาได้รับการปกป้องอย่างเหมาะสม
  • ป้องกันการโจมตีแบบ Man-in-the-Middle (MITM): การเข้ารหัสช่วยลดความเสี่ยงจากการโจมตีที่ผู้ไม่หวังดีที่แทรกตัวเข้าตรงกลางระหว่างผู้ใช้กับเซิร์ฟเวอร์

ความไม่ปลอดภัยของโปรโตคอล HTTP

สาเหตุที่เราไม่ควรใช้โปรโตคอล HTTP คือ

  • ไม่ปลอดภัย: ข้อมูลที่ส่งระหว่างเว็บเบราว์เซอร์  (ไคลแอนด์)  กับเว็บไซต์ (เซิร์ฟเวอร์) จะอยู่ในรูปของข้อความปกติ จึงเสี่ยงต่อการถูกนำไปใช้โดยผู้ไม่หวังดี
  • ไม่มีการเข้ารหัส: ใครก็ตามในเครือข่าย (เช่น Wi-Fi สาธารณะ) สามารถอ่านข้อมูลเหล่านี้ได้
  • เหมาะใช้สำหรับ: เว็บไซต์ที่ไม่เกี่ยวข้องกับข้อมูลที่ละเอียดอ่อน เช่น บล็อกทั่วไปหรือหน้าข้อมูลสาธารณะ

การรักษาความปลอดภัยด้วย HTTPS

HTTPS ย่อมาจาก Hypertext Transfer Protocol Secure เป็นเวอร์ชันที่ปลอดภัยของโปรโตคอล HTTP โดย HTTPS จะเข้ารหัสข้อมูล เพื่อป้องกันการดักจับหรือแก้ไขข้อมูลระหว่างทาง HTTPS มีคุณสมบัติต่าง ๆ ดังนี้

  • ปลอดภัยด้วยการเข้ารหัส: ใช้โปรโตคอล SSL/TLS ในการเข้ารหัสข้อมูล แม้จะดักข้อมูลได้ก็ไม่สามารถอ่านได้
  • แสดงไอคอน: สังเกตได้จากไอคอนรูปแม่กุญแจในแถบแสดง URL ของเบราว์เซอร์
  • เพิ่มความน่าเชื่อถือและอันดับ SEO: Google ให้อันดับเว็บไซต์ที่ใช้โปรโตคอล HTTPS สูงกว่าเว็บไซต์ที่ใช้โปรโตคอล HTTP
  • จำเป็นสำหรับ: ธนาคาร, อีคอมเมิร์ซ, หน้าล็อกอินเข้าสู่ระบบ หรือทุกที่ ๆ เกี่ยวข้องกับข้อมูลส่วนตัวหรือข้อมูลทางการเงิน
  • ป้องกันการดักดูข้อมูล: แฮกเกอร์ไม่สามารถสกัดข้อมูลอ่อนไหวอย่าง รหัสผ่านหรือข้อมูลบัตรเครดิตได้
  • ป้องกันการแทรกเนื้อหา: ที่ไม่พึงประสงค์จากบุคคลที่สาม เช่น โฆษณา หรือ มัลแวร์
  • เพิ่มความน่าเชื่อถือ: ให้กับเว็บไซต์ โดยเฉพาะเว็บธุรกิจหรืออีคอมเมิร์ซ
การรักษาความปลอดภัยด้วย HTTPS

ข้อจำกัดของ HTTPS

แม้โปรโตคอล HTTPS จะเพิ่มความปลอดภัยในการสื่อสารระหว่างผู้ใช้กับเว็บไซต์ แต่ก็ยังไม่เพียงพอ ในหลายกรณี โดยเฉพาะเมื่อพูดถึงการปกป้องข้อมูลแบบครบวงจร (end-to-end) ต่อไปนี้คือข้อจำกัดของ HTTPS

  • ไม่ปกป้องข้อมูลที่จัดเก็บ: โปรโตคอล HTTPS ปกป้องเฉพาะข้อมูลระหว่างการส่งผ่านเครือข่าย แต่ไม่ครอบคลุมถึงข้อมูลที่ถูกจัดเก็บในฐานข้อมูลหรือไฟล์บนเซิร์ฟเวอร์
  • ไม่ป้องกันการโจมตีจากภายในระบบ: หากมีผู้ไม่หวังดีภายในองค์กรหรือเครือข่าย เช่น พนักงานหรือบริการที่มีสิทธิ์เข้าถึงข้อมูล ข้อมูลที่ถอดรหัสแล้วอาจถูกนำไปใช้ในทางผิด
  • เว็บไซต์ปลอมก็สามารถใช้ HTTPS ได้: ผู้โจมตีสามารถสร้างเว็บไซต์ปลอมที่มีใบรับรอง SSL ได้ ทำให้ผู้ใช้เข้าใจผิดว่าเว็บไซต์นั้นปลอดภัย
ข้อจำกัดของ HTTPS

ควรเข้ารหัสอะไรบ้าง?

เนื่องจากโปรโตคลอล HTTPS มีข้อจำกัดอย่างที่ว่าไว้ในหัวข้อบน เราจึงควรเข้ารหัสข้อมูลอ่อนไหวต่าง ๆ ดังต่อไปนี้

  • ข้อมูลอ่อนไหวที่จะบันทึกลงฐานข้อมูล: เช่น ข้อมูลส่วนบุคคล, หมายเลขบัตรเครดิต, หรือข้อมูลสุขภาพ
  • ไฟล์ที่จัดเก็บในดิสก์: เช่น logs หรือไฟล์ส่งออกที่มีข้อมูลอ่อนไหว
  • คิวรีสตริงก์ (Query String): ข้อมูลที่ถูกส่งไปกับ URL
  • ความลับในไฟล์ web.config: ควรเข้ารหัสแล้วใช้เครื่องมือจัดการความลับเช่น แอเชอคีย์วอลท์ (Azure Key Vault)

เพราะอะไรควรใช้อัลกอริทึม AES ในการเข้ารหัส?

ควรใช้อัลกอริทึม AES (Advanced Encryption Standard) ใน ASP.NET เพราะเป็นทางเลือกที่ดีเพื่อปกป้องข้อมูลที่ละเอียดอ่อน เพราะมันมีทั้งความปลอดภัยสูงและประสิทธิภาพดีเยี่ยม ต่อไปนี้คือเหตุผลหลักที่ AES เหมาะกับ เว็บไซต์หรือแอพแบบ ASP.NET

  • ปลอดภัยระดับสูง: AES ใช้คีย์ขนาด 128, 192 หรือ 256 บิต ซึ่งต้านการโจมตีแบบ brute-force ได้ดี และได้รับการรับรองจาก NIST
  • ทำงานเร็วและมีประสิทธิภาพ: เหมาะกับทั้งการเข้ารหัสข้อมูลที่ส่งผ่าน API และข้อมูลที่จัดเก็บในฐานข้อมูลหรือไฟล์
  • เขียนโค้ดใช้งานเพราะมี .NET API: ASP.NET มีคลาส Aes.Create() ในเนมสเปส System.Security.Cryptography ที่ช่วยให้เราเขียนโค้ดเข้าและถอดรหัสได้ง่ายมาก
  • รองรับทั้งข้อมูลระหว่างส่ง (in transit) และข้อมูลที่จัดเก็บ (at rest) : เช่น การเข้ารหัส token, cookie, connection string, หรือข้อมูลผู้ใช้ในฐานข้อมูล
  • สามารถใช้ร่วมกับ Key Vault: หรือ Secrets Manager ได้ เพื่อจัดการคีย์เข้ารหัสอย่างปลอดภัยใน production

อัลกอริทึม AES คืออะไร?

AES คืออัลกอริทึมการเข้ารหัสแบบสมมาตรที่ใช้กันอย่างแพร่หลายทั่วโลก เพื่อปกป้องข้อมูลให้ปลอดภัยจากการเข้าถึงโดยไม่ได้รับอนุญาต โดยใช้ คีย์เดียวกันในการเข้ารหัสและถอดรหัส ลักษณะสำคัญของ AES ได้แก่

  • ใช้อัลกอริทึมการเข้ารหัสแบบสมมาตร (Symmetric Encryption) หมายความว่าใช้คีย์เดียวกันในการเข้ารหัสและถอดรหัสข้อมูล
  • ทำงานกับข้อมูลแบบบล็อกขนาด 128 บิต (16 ไบต์)
  • รองรับขนาดคีย์ 3 แบบ 128, 192 และ 256 บิต
  • จำนวนรอบการเข้ารหัสขึ้นอยู่กับขนาดของคีย์
อัลกอริทึม AES คืออะไร?

ตัวอย่างที่ 1: วิธีใช้ AES เพื่อเข้ารหัสข้อมูลก่อนบันทึกลงฐานข้อมูล

การบันทึกข้อมูลที่อ่อนไหวเช่น หมายเลขบัตรประจำตัวประชาชน หมายเลขบัตรเครดิตเข้าสู่ฐานข้อมูลโดยไม่เข้ารหัสก่อนหากฐานข้อมูลเกิดการรั่วไหลด้วยสาเหตุใดก็ตาม จะเสี่ยงต่อการที่ผู้ไม่หวังดีนำไปใช้ ดังนั้นในหัวข้อนี้  9Expert Training  จะสอนวิธีข้ารหัสข้อมูลก่อนบันทึกลงฐานข้อมูล โดยมีขั้นตอนวิธีทำดังนี้
 

สร้างโปรเจ็กต์เพื่อการทดสอบใน Visual Studio

 create-a-new-project.png
 create-new-project-with-asp-net-core-web-app-template.png
 config-new-project.png
 setting-additional-information-project.png
 replace-code-in-file-index-cshtml.png

คำอธิบายโค้ดในไฟล์ index.cshtml.cs

ไฟล์ index.cshtml.cs เป็นไฟล์แบบ Code-behind ของหน้าเว็บนี้ ทำหน้าที่เก็บโค้ดภาษา C# เพื่อกำหนดการทำงานต่าง ๆ เป็นโปรเจกต์แบบ ASP.NET Razor Pages ที่มีฟังก์ชันสำหรับรับข้อความจากผู้ใช้เพื่อส่งไปยังหน้า Result คำอธิบายโค้ดเป็นดังนี้

  • บรรทัดที่ 7: กำหนดชื่อเนมสเปซเป็น LoyEncryptDbPro.Pages
  • บรรทัดที่ 9: นิยามคลาส IndexModel ให้เป็นอนุพันธ์ของคลาส PageModel ซึ่งทำหน้าที่เป็นคลาสฐานของ Razor Page
  • บรรทัดที่ 11: แอตทริบิวต์ BindProperty ทำหน้าที่ระบุว่า SupportsGet = true หมายถึงพร็อพเพอร์ตี Message สามารถรับค่าผ่าน GET ได้ด้วย
  • บรรทัดที่ 12: ประกาศ Message เป็นพร็อพเพอร์ตีที่ผูกกับฟอร์ม HTML
  • บรรทัดที่ 14: กำหนดว่าเมื่อผู้ใช้ส่งฟอร์ม (POST) ให้ไปที่หน้าเว็บ Result.cshtml
  • บรรทัดที่ 16: ส่งค่าในตัวแปร message (สิ่งที่ผู้ใช้ป้อนพิมพ์) ไปเป็นคิวรีสตริงก์
คำอธิบายโค้ดในไฟล์ index.cshtml.cs

คำอธิบายโค้ดในไฟล์ index.cshtml

ไฟล์ index.cshtml ทำหน้าที่เป็นหน้าเว็บที่จะถูกแสดงในบราวเซอร์ทันทีที่เรารันโปรแกรมทดสอบ ผู้ใช้จะเห็นแบบฟอร์มง่าย ๆ ตามโค้ด HTML ที่เราใส่ไว้ เมื่อกรอกข้อความแล้วคลิกปุ่ม "ส่งข้อความ" จะเข้าสู่เมธอด OnPost() ในฝั่ง C# (โค้ดในไฟล์ index.cshtml.cs) และเปิดหน้า Result.cshtml พร้อมค่าข้อความที่ส่งไป (ในคิวรีสตริงก์)
 
ต่อไปนี้เป็นคำอธิบายของโค้ด HTML ในหน้า Razor Page (Index.cshtml) แต่ละบรรทัด
 

  • บรรทัดที่ 1: คอมเมนต์ใน Razor ใช้
@* *@

เพื่อใส่โน้ตหรือบันทึก ไม่แสดงในเบราว์เซอร์

  • บรรทัดที่ 2: ระบุว่าไฟล์นี้คือ Razor Page มี URL เป็นของตัวเอง (เช่น
/Index)

ซึ่งอยู่ในเนมสเปซ

LoyEncryptDbPro.Pages
  • บรรทัดที่ 4: ระบุว่าเราไม่ต้องการใช้ Layout ของ Razor Page  เช่นไม่มี header / footer และลิงค์ต่าง ๆ
  • บรรทัดที่ 6 - 9: ขึ้นบรรทัดใหม่, แสดงข้อความว่า "Index page", และเส้นแบ่ง
  • บรรทัดที่ 10: สร้างฟอร์มที่ใช้เมธอด POST (ส่งข้อมูลไปยัง server)
  • บรรทัดที่ 11: กำหนด label เพื่อแสดงคำอธิบายให้ช่องป้อนข้อความ
  • บรรทัดที่ 12: กำหนด input เป็นช่องให้ผู้ใช้พิมพ์ข้อความที่ถูกผูกกับพรอพเพอร์ตี Message ใน IndexModel
  • บรรทัดที่ 13: กำหนด button คือปุ่มใช้สำหรับส่งข้อมูล

สร้างหน้า Result

ต่อไปเราจะสร้างหน้าเว็บชื่อ Result เพื่อใช้ทำหน้าที่แสดงข้อมูลเข้ารหัสที่ถูกส่งมาจากหน้า Index และนำไปบันทึกลงสู่ฐานข้อมูล วิธีทำเป็นดังนี้

สร้างหน้า Result
add-razor-empty-page
 set-name-result-cshtml
 replace-code-in-result-file

คำอธิบายโค้ดในไฟล์ Result.cshtml.cs

ไฟล์ Result.cshtml.cs เป็นไฟล์แบบ Code-behind ของหน้าเว็บ Result โค้ดที่เห็นทำหน้าที่รับข้อความจากผู้ใช้แล้วเข้ารหัสด้วยอัลกอริทึม AES ในโหมด ECB (Electronic Codebook) ต่อไปนี้เป็นคำอธิบายโค้ด
 

  • บรรทัดที่ 7: กำหนดชื่อเนมสเปซเป็น LoyEncryptDbPro.Pages
  • บรรทัดที่ 9: นิยามคลาส ResultModel ซึ่งสืบทอดมาจากคลาส PageModel อันเป็นคลาสแม่ของ Razor Page
  • บรรทัดที่ 11: แอตทริบิวต์ BindProperty ระบุว่า SupportsGet = true หมายถึงตัวแปร Message สามารถรับค่าผ่าน GET ได้ด้วย
  • บรรทัดที่ 12: ประกาศ Message เป็นพร็อพเพอร์ตีที่ผูกกับฟอร์ม HTML
  • บรรทัดที่ 13: ประกาศตัวแปร myMessage เพื่อใช้เก็บข้อมูลที่เข้ารหัสแล้ว
  • บรรทัดที่ 15-18: โค้ดนำข้อมูลใน Message ไปเข้ารหัสแล้วเก็บไว้ในตัวแปร myMessage

การเข้ารหัสเกิดขึ้นตรงบรรทัดที่ 17 โดยการเรีกเมธอด Encrypt โปรดอ่านคำอธิบายโค้ดของมธอด Encrypt ในหัวข้อถัดไป
 

เมธอด Encrypt

นี่คือเมธอดที่เป็นหัวใจของตัวอย่างนี้ ทำหน้าที่เข้ารหัสข้อความที่ผู้ใช้ป้อน คำอธิบายโค้ดเป็นดังนี้
 

  • บรรทัดที่ 20: ประกาศเมธอดแบบ static ที่รับข้อความธรรมดา (plain Text) และคืนค่ากลับเป็นข้อความที่เข้ารหัสแบบ Base64
  • บรรทัดที่ 22: ประกาศตัวแปร myKey เพื่อกำหนดรหัสลับเป็นข้อความธรรมดา
  • บรรทัดที่ 23: แปลงรหัสลับให้เป็นไบต์อาร์เรย์ด้วยการเข้ารหัส UTF8
  • บรรทัดที่ 24: แปลงข้อความธรรมดา (
plainText

) ให้เป็นไบต์อาร์เรย์ด้วยการเข้ารหัส UTF8 เช่นกัน

  • บรรทัดที่ 26: สร้างอินสแตนซ์ของตัวเข้ารหัสแบบ AES
  • บรรทัดที่ 27: ตั้งค่าคีย์ (Key) เป็น myBytes
  • บรรทัดที่ 28: ตั้งโหมดการเข้ารหัสเป็น ECB (Electronic Codebook)
  • บรรทัดที่ 29: เลือกใช้การเติมช่องว่างแบบ PKCS7 เพื่อให้บล็อกมีขนาดพอดี
  • บรรทัดที่ 31: สร้างอ็อบเจ็กต์เพื่อใช้เข้ารหัส
  • บรรทัดที่ 32-36: ใช้ฟังก์ชัน TransformFinalBlock เพื่อเข้ารหัสข้อมูลทั้งหมด
  • บรรทัดที่ 37: แปลงผลลัพธ์การเข้ารหัสจากไบต์อาร์เรย์ ให้เป็นข้อความ Base64 เพื่อจัดเก็บหรือส่งต่อได้ง่าย

 
แทนที่โค้ดในไฟล์ Result.cshtml ด้วยโค้ดนี้

Result.cshtml

วิธีทดสอบโปรแกรม

เมื่อใส่โค้ดครบหมดแล้ว ต่อไปเราจะทดสอบมันโดยทำตามขั้นตอนต่อไปนี้

วิธีทดสอบโปรแกรม
 index-page
result-page

สำหรับวิธีถอดรหัสข้อมูลหลังการอ่านกลับออกมาจากฐานข้อมูล โปรดดูวิธีทำในตัวอย่างต่อไป (ตัวอย่างที่ 2)

ตัวอย่างที่ 2: การใช้ AES เพื่อเข้าและถอดรหัส Query String

คำว่าคิวรีสตริงก์ (Query String) หมายถึงค่าตัวแปรต่างๆ ที่ถูกส่งผ่าน URL (เรียกอีกอย่างว่า URL Parameter) โปรดสังเกตว่าแม้เราจะรันโปรแกรมด้วยโปรโตคอล HTTPS แต่ในหน้า Result เราจะเห็น Query String (1) ที่แถบแสดง URL แสดงหมายเลขบัตรเครดิตที่ยังไม่ได้เข้ารหัส (2) ซึ่งไม่ดี เพราะผู้ไม่หวังดีสามารถดักจับ และนำข้อมูลนี้ไปใช้ได้ทันที

ตัวอย่างที่ 2: การใช้ AES เพื่อเข้าและถอดรหัส Query String

ดังนั้นในหัวข้อนี้ 9Expert Training  จะแสดงวิธีเข้ารหัสข้อมูลที่อ่อนไหวในคิวรีสตริงก์ก่อนส่งไปยังหน้าเว็บอื่น ขั้นตอนการทำเป็นดังนี้

  1. สร้างโซลูชั่นใหม่ด้วยโปรแกรมวิสชวลสตูดิโอ
  2. เลือกเทมเพลตเดียวกับตัวอย่างก่อนหน้า
  3. ตั้งชื่อโปรเจ็กต์ว่า LoyEncryptQueryPro
  4. ตั้งชื่อโซลูชันว่า LoyEncryptQuerySol
ตั้งชื่อโซลูชันว่า LoyEncryptQuerySol
  1. แทนที่โค้ดในหน้า Index.cshtml ด้วยโค้ดนี้
แทนที่โค้ดในหน้า Index.cshtml ด้วยโค้ดนี้
  1. แทนที่โค้ดในหน้า Index.cshtml.cs ด้วยโค้ดนี้
  2. เพิ่มหน้าเว็บ Result ด้วยวิธีเดียวกันกับตัวอย่างก่อนหน้า
เพิ่มหน้าเว็บ Result ด้วยวิธีเดียวกันกับตัวอย่างก่อนหน้า
  1. แทนที่โค้ดในไฟล์ Result.cshtml ด้วยโค้ดนี้
แทนที่โค้ดในไฟล์ Result.cshtml ด้วยโค้ดนี้
  1. แทนที่โค้ดในไฟล์ Result.cshtml.cs ด้วยโค้ดนี้

คำอธิบายโค้ดของเมธอด  Decrypt

การถอดรหัสเกิดที่บรรทัด 18 โดยการเรียกใช้เมธอด Decrypt อันเป็นหัวใจของตัวอย่างนี้ มันทำหน้าที่ถอดรหัสข้อความ โดยใช้ AES encryption แบบ ECB คำอธิบายโค้ดแต่ละบรรทัดเป็นดังนี้
 

  • บรรทัดที่ 21: นิยามเมธอดแบบ static ที่รับข้อความเข้ารหัสในรูปแบบสตริงก์แล้วคืนค่าข้อความที่ถอดรหัสแล้ว
  • บรรทัดที่ 23: กำหนดคีย์เป็นข้อความ แล้วแปลงเป็นไบต์อาร์เรย์ด้วย UTF-8 เพื่อนำไปถอดรหัส
  • บรรทัดที่ 24: แปลงข้อความที่เข้ารหัสจาก Base64 กลับมาเป็นไบต์อาร์เรย์
  • บรรทัดที่ 27: สร้างอ็อบเจ็กต์ AES กำหนดอัลกอริทึมเป็น AES
  • บรรทัดที่ 29: ใช้โหมด ECB (Electronic Code Book) ในการถอดรหัส
  • บรรทัดที่ 30: ใช้ Padding แบบ PKCS7 เพื่อเติมข้อมูลให้ตรงบล็อก
  • บรรทัดที่ 32-37: สร้างตัวถอดรหัสแล้วถอดรหัสข้อมูล
  • บรรทัดที่ 38: คืนค่าข้อความที่ถูกถอดรหัสแล้วเป็นสตริงก์

วิธีทดสอบโปรแกรม

ต่อไปเราจะทดสอบโปรแกรมที่เพิ่งทำเสร็จ มีขั้นตอนดังต่อไปนี้
 

  1. ที่แถบบนสุดของโปรแกรมวิสชวลสตูดิโอ (ใต้รายการเมนู) ให้กดปุ่มรันโดยใช้โปรโตคอล https เหมือนในตัวอย่างที่ 1
วิธีทดสอบโปรแกรม
  1. เมื่อรันโปรแกรมจะเห็นเว็บบราวเซอร์เปิดพร้อมแสดงหน้านี้ ให้ป้อนข้อความแล้วกดปุ่มส่งข้อความ
รันโปรแกรมจะเห็นเว็บบราวเซอร์เปิด
  1. โปรดสังเกตว่าวรีสตริงก์ได้รับการเข้ารหัส (1) และเราสามารถถอดรหัสได้ (2)

สรุป

การรักษาความปลอดภัยข้อมูล เป็นประเด็นสำคัญที่ผู้ใช้งานและผู้พัฒนาต่างให้ความสนใจ การเข้ารหัสข้อมูลที่อ่อนไหวเป็นหนึ่งในหลักนิยมพื้นฐานของการพัฒนาเว็บแอพ ที่ท่านได้อ่านไปแล้วนี้ 9Expert Training ได้แสดงตัวอย่างการเข้ารหัสข้อมูลสองตัวอย่าง คือ การเข้ารหัสก่อนบันทึกลงฐานข้อมูล และการเข้ารหัสคิวรีสตริงก์ ท่านสามารถนำเทคนิคทั้งสองนี้ไปประยุกต์ใช้ได้ง่าย ๆ โดยการนำเมธอด Encrypt และ Decrypt ไปใช้เมื่อการเขียนโค้ดเพื่อเข้าและถอดรหัสในงานของท่านได้โดยตรง