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

ภาพที่ 1.1 ตัวอย่างรูปแบบข้อมูลที่ปกติ และแบบที่ถูกเข้ารหัส
สมุติว่ารหัสผ่านสำหรับเข้าฐานข้อมูลของเราคือ admin1234 นั่นหมายถึง โดยทั่วไปเรามักจะระบุมันลงไปในโค๊ดโปรแกรมตรงๆเลยใช่ไหมละครับ แน่นอน..นั่นก็เป็นวิธีที่ง่ายแต่มันไม่ปลอดภัยเอาซะเลย เพราะถ้ามีใครไม่หวังดี พยายามจะใช้โปรแกรมประเภท Decompile เจาะโปรแกรมเรา ซึ่งมันจะสามารถเห็น SourceCode ต่างๆที่เราเขียนไว้ทั้งหมด แน่นอนว่ารหัสผ่านที่เราระบุไว้ในโค๊ดก็จะถูกมองเห็นได้เช่นกัน หมายความว่าฐานข้อมูลของเรา อาจถูกเข้าถึงได้จากผู้ไม่หวังดี.
*ดังนั้น เราจะมาช่วยปกป้องรหัสผ่านไม่ให้ใครเอาไปใช้ได้. ให้ผู้อ่านมองภาพให้ออกว่ามันจะดีต่อเรายังไงนะครับ ^^
ภาพที่ 1.1 ตัวอย่างรูปแบบข้อมูลที่ปกติ และแบบที่ถูกเข้ารหัส
จากภาพที่ 1.1 ค่าเหล่านี้เราจะเก็บไว้ที่ app.config ของ Project ซึ่งจะมีรูปแบบการเก็บอยู่ 2 แบบดังนี้
แบบที่ 1
- เก็บแบบเป็นอักษรธรรมดา
แบบที่ 2
-เก็บแบบมีการเข้ารหัส หมายความว่า ข้อมูลที่เก็บจะอยู่ในรูปแบบที่ไม่สามารถอ่านออกมาเป็นค่าที่แท้จริงได้ นอกจากจะใช้ SaltGen.dll เป็นตัวอ่านให้
ตัวอย่างเช่น เรามีรหัสในการเข้าฐานข้อมูลคือ "admin1234" ดังนั้น ก่อนที่เราจะนำมาเก็บไว้ใน app.config เราต้องแปลงร่างให้มันเสียก่อน และเมื่อมันแปลงร่างเสร็จ มันอาจจะอยู่ในรูปแบบนี้ "1z4KqIZJnjZIYHYvr0-9DQl2yWX8eddMQ" ซึ่งถ้าเราเรียกใช้มันตรงๆเพื่อใช้เป็นรหัสเข้าถึงฐานข้อมูล คงไม่มีทางเข้าได้ เพราะรหัสจริงๆของเราคือ "admin1234"
ตัวอย่างเช่น เรามีรหัสในการเข้าฐานข้อมูลคือ "admin1234" ดังนั้น ก่อนที่เราจะนำมาเก็บไว้ใน app.config เราต้องแปลงร่างให้มันเสียก่อน และเมื่อมันแปลงร่างเสร็จ มันอาจจะอยู่ในรูปแบบนี้ "1z4KqIZJnjZIYHYvr0-9DQl2yWX8eddMQ" ซึ่งถ้าเราเรียกใช้มันตรงๆเพื่อใช้เป็นรหัสเข้าถึงฐานข้อมูล คงไม่มีทางเข้าได้ เพราะรหัสจริงๆของเราคือ "admin1234"
เอาละ! ไม่พิมพ์มาก เจ็บนิ้ว > < มาดูวิธีเอาไปใช้กันเลย
ขั้นตอนที่ 1
- ให้ทำการ Download ไฟล์ SaltGen.dll มาก่อน
- ไปที่ VisualStudio Project ของเรา แล้วทำการเพิ่มโค๊ดเหล่านี้ลงไปใน app.config
<add key = "ชื่อที่ใช้เรียก" value="ค่าที่จะเก็บ" />
</appSetting>
จากโค๊ดตัวอย่าง จะเป็นโครงสร้างแบบ XML ส่วนค่าข้างใน ก็ให้ Design ตามที่ชอบได้เลยนะครับ
ตัวอย่างไฟล์ app.config ผมออกแบบสำหรับการเชื่อมต่อฐานข้อมูล MS SQLServer และ MySQL
ขั้นตอนที่ 2
ทำการ Add Reference เข้า Project
• คลิกขวาที่โปรเจค แล้วทำตามภาพเลยครับ

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

• เลือก 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
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
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();

หน้าตาประมาณนี้
เพิ่มเติม*
หากต้องการให้โปรแกรมที่เราทำ สั่งเปิดหน้าการเข้ารหัส ตามภาพข้างล่างนี้ ให้ใช้คำสั่งต่อไปนนี้นะครับ
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 ไม่เอา
Salt text: โปรแกรมจะสร้างให้อัติโนมัติ หรือจะเพิ่มจะลบได้ตามใจชอบ
Encrypted text: คือ Real text ที่ถูกเข้ารหัส โดยมี Salt text เป็นตัวช่วย
ให้นำ Salt tex กับ Encrypted text มาใส่ใน app.config แค่สองตัวนี้เท่านั้น Real text ไม่เอา
ไม่มีความคิดเห็น:
แสดงความคิดเห็น