วันศุกร์ที่ 23 พฤศจิกายน พ.ศ. 2561

การเข้ารหัส Username,Password ในการเชื่อมต่อฐานข้อมูล C# .Net Framework


SaltGen.DLL เป็น Library สำหรับใช้เข้ารหัสค่า Config ที่สำคัญ เช่น  user,password เพื่อให้ข้อมูลเหล่านี้อยู่ในรูปแบบที่ไม่สามารถอ่านได้โดยง่าย


*ตัวอย่าง
          สมุติว่ารหัสผ่านสำหรับเข้าฐานข้อมูลของเราคือ admin1234 นั่นหมายถึง โดยทั่วไปเรามักจะระบุมันลงไปในโค๊ดโปรแกรมตรงๆเลยใช่ไหมละครับ แน่นอน..นั่นก็เป็นวิธีที่ง่ายแต่มันไม่ปลอดภัยเอาซะเลย  เพราะถ้ามีใครไม่หวังดี พยายามจะใช้โปรแกรมประเภท Decompile เจาะโปรแกรมเรา ซึ่งมันจะสามารถเห็น SourceCode ต่างๆที่เราเขียนไว้ทั้งหมด แน่นอนว่ารหัสผ่านที่เราระบุไว้ในโค๊ดก็จะถูกมองเห็นได้เช่นกัน หมายความว่าฐานข้อมูลของเรา อาจถูกเข้าถึงได้จากผู้ไม่หวังดี.
*ดังนั้น เราจะมาช่วยปกป้องรหัสผ่านไม่ให้ใครเอาไปใช้ได้. ให้ผู้อ่านมองภาพให้ออกว่ามันจะดีต่อเรายังไงนะครับ ^^


ภาพที่ 1.1 ตัวอย่างรูปแบบข้อมูลที่ปกติ และแบบที่ถูกเข้ารหัส

จากภาพที่ 1.1 ค่าเหล่านี้เราจะเก็บไว้ที่  app.config ของ  Project ซึ่งจะมีรูปแบบการเก็บอยู่ 2 แบบดังนี้

แบบที่ 1

- เก็บแบบเป็นอักษรธรรมดา

แบบที่ 2 

-เก็บแบบมีการเข้ารหัส หมายความว่า ข้อมูลที่เก็บจะอยู่ในรูปแบบที่ไม่สามารถอ่านออกมาเป็นค่าที่แท้จริงได้ นอกจากจะใช้ SaltGen.dll เป็นตัวอ่านให้
ตัวอย่างเช่น เรามีรหัสในการเข้าฐานข้อมูลคือ "admin1234" ดังนั้น ก่อนที่เราจะนำมาเก็บไว้ใน app.config เราต้องแปลงร่างให้มันเสียก่อน และเมื่อมันแปลงร่างเสร็จ มันอาจจะอยู่ในรูปแบบนี้ "1z4KqIZJnjZIYHYvr0-9DQl2yWX8eddMQ" ซึ่งถ้าเราเรียกใช้มันตรงๆเพื่อใช้เป็นรหัสเข้าถึงฐานข้อมูล คงไม่มีทางเข้าได้ เพราะรหัสจริงๆของเราคือ "admin1234"

เอาละ! ไม่พิมพ์มาก เจ็บนิ้ว > < มาดูวิธีเอาไปใช้กันเลย

ขั้นตอนที่ 1

  • ให้ทำการ Download ไฟล์ SaltGen.dll มาก่อน
  • ไปที่  VisualStudio Project ของเรา แล้วทำการเพิ่มโค๊ดเหล่านี้ลงไปใน app.config 
<appSetting>
  <add key = "ชื่อที่ใช้เรียก" value="ค่าที่จะเก็บ" />
</appSetting>
จากโค๊ดตัวอย่าง จะเป็นโครงสร้างแบบ XML ส่วนค่าข้างใน ก็ให้ Design ตามที่ชอบได้เลยนะครับ


ตัวอย่างไฟล์ app.config  ผมออกแบบสำหรับการเชื่อมต่อฐานข้อมูล MS SQLServer และ MySQL

ขั้นตอนที่ 2

ทำการ Add Reference เข้า Project

• คลิกขวาที่โปรเจค แล้วทำตามภาพเลยครับ


• เลือก Browse... ไปยังไฟล์ SaltGen.dll ที่เราโหลดมา ตามภาพด้านล่าง แล้วกด OK



เสร็จแล้ว! ในส่วนของการ Add Reference และการกำหนดค่าใน app.config ง่ายมาก ^^ 


มาดูวิธีเรียกใช้กันนะครับ

แบบที่ 1 string server_address

   เป็นคำสั่ง Get ค่าแบบธรรมดา มันจะนำมาเก็บไว้ที่ server_address ตามโค๊ดด้านล่าง
string server_address = SaltGen.AppSetting.GetData("mysql_server_address");
*ผลลัพธ์* จะเป็นค่าที่ถูกเก็บอยู่ใน app.config ในส่วนของ key ที่ชื่อว่า "mysql_server_address"
ตัวอย่างผลลัพธ์ > >        192.168.1.1

แบบที่ 2 string username และ password 

   เป็นคำสั่ง Get ค่า user,password มันจะทำการถอดรหัส แล้วนำมาเก็บไว้ที่ username และ password ตามโค๊ดด้านล่าง
string username = SaltGen.Encrypt.ReturnDecryptText(AppSetting.GetData("mysql_userlogin",AppSetting.GetData("mysql_salt_userlogin"));
string password = SaltGen.Encrypt.ReturnDecryptText(AppSetting.GetData("mysql_password",AppSetting.GetData("mysql_salt_password"));
ตัวอย่างผลลัพธ์ >>     mysqluser และ admin1234

ดูให้ดีๆ

จากโครงสร้างของ SalGen.dll ที่ Method ที่ชื่อว่า ReturnDecryptText() จำเป็นต้องใช้ Parameter จำนวน 2 ตัวในการส่งเข้าไปถอดรหัส ดังนั้น Parameter ที่เราจะส่งเข้าไปคือ
  • mysql_password อ้างอิงจาก app.config มันจะอยู่ในรูปแบบตัวอักษรที่ถูกเข้ารหัส "5nTn7MRq0P9y37hmlQ6pSQ=="
  • mysql_ salt_password อ้างอิงจาก app.config มันจะอยู่ในรูปแบบตัวอักษรที่ถูกเข้ารหัส "cixphaixzyq"

จากทั้งหมดที่ว่ามา ก็พร้อมใช้แล้ว เดี๋ยวมาดูวิธีเข้ารหัสตัวอักษรกันต่อเลย...


โหลดตัว  .exe Download (หากเปิดไม่ได้ให้ติดตั้ง .Net 4.0  ก่อนนะครับ .Net 4.0)

เพิ่มเติม*
หากต้องการให้โปรแกรมที่เราทำ สั่งเปิดหน้าการเข้ารหัส ตามภาพข้างล่างนี้ ให้ใช้คำสั่งต่อไปนนี้นะครับ
SaltGen.Form1 f = new SaltGen.Form1();
 f.Show();


หน้าตาประมาณนี้

อธิบายคร่าวๆ

Real text: ให้เราใส่อักษรที่ต้องการเข้ารหัส เช่นรหัสผ่าน หรืออะไรก็ได้
Salt text: โปรแกรมจะสร้างให้อัติโนมัติ หรือจะเพิ่มจะลบได้ตามใจชอบ
Encrypted text: คือ Real text ที่ถูกเข้ารหัส โดยมี Salt text เป็นตัวช่วย


ให้นำ Salt tex กับ Encrypted text  มาใส่ใน app.config แค่สองตัวนี้เท่านั้น  Real text ไม่เอา

เพียงเท่านี้ก็เสร็จแล้ว ลองรันโปรแกรมดูได้เลย หากติดปัญหาตรงไหน Inbox มาสอบถามได้ที่


เขาคือ terza ชอบขี่รถเล่น...

ไม่มีความคิดเห็น:

แสดงความคิดเห็น

วิธีแก้ “Operation could not be completed (error 0x00000709)

วิธีแก้ปัญหา Add Printer แล้วเจอ Error Connect to Printer 0x709 ปัญหานี้เจอตอนกำลังจะ Add Printer ที่แชร์ใน Wifi ครับ เครื่องแชร์ Pr...