[Java] Encrypt MD5 ภาษา Java

วันนี้จะมาแบ่งปันวิธีการเข้ารหัสผ่านแบบ MD5 ซึ่งเป็นการเข้ารหัสที่นิยมกันนะครับ แต่ก็ไม่ได้หมายความว่าจะปลอดภัยที่สุดนะครับ ทำให้หลายๆที่ต้องมีการเพิ่ม key เข้าไป หรือ encryption ซ้ำอีกก็แล้วแต่นะครับ ในตัวอย่างที่ยกมานี้เป็นการเข้ารหัสแบบ MD5 ปกตินะครับ

การแปลงรหัสผ่านก่อนการ query ลง databases ก็เป็นวิธีการเพิ่มความปลอดภัยให้กับ Account ของ user ในเว็บไซต์ของเราครับ

มาถึงในส่วน source code นะครับ

ก่อนอื่นก็ต้อง import package มาก่อนครับ
import java.security.MessageDigest;

ในตอนนี้ จะมีการนำตัวแปร String password ดั้งเดิมมาแปลงเป็น MD5 นะครับ

//Encrypt Password to MD5
MessageDigest algorithm = MessageDigest.getInstance("MD5");
algorithm.reset();
algorithm.update(password.getBytes());
byte[] md5 = algorithm.digest();

StringBuilder hexString = new StringBuilder();
for (int i=0;i < md5.length;i++) {
String hex = Integer.toHexString(0xFF & md5[i]);
      if(hex.length()==1)
           hexString.append('0');
      hexString.append(hex); 
}             
password = hexString.toString();
สังเกตว่าจะมีการใช้ Class MessageDigest มันคืออะไร ลองอ่านดูนะครับ

Message Digest Algorithm หรืออีกชื่อนึงคือ Hash algorithm
การเข้ารหัสแบบนี้เรียกว่า one-way encryption คือเข้าได้ถอดไม่ได้ ดังนั้นการเช็คพาสเวิร์ดก็จะเป็นการ match ระหว่าง 2 string ที่แปลงเป็น MD5 ทั้งที่ user กรอกมา และที่มีอยู่ในฐานข้อมูลว่าตรงกันไหมทุกๆ byte เลยครับ ถ้าตรงก็แสดงว่าถูกต้อง

ถ้าถามว่า เมื่อเป็น one-way encryption แล้ว ทำไมยังมีเว็บถอดรหัสที่เอา MD5 ไปแปะแล้วจะได้รหัสดั้งเดิมมา?
เท่าที่รู้มานะครับ คือ เว็บพวกนี้จะมีการคำนวณ MD5 ไว้แล้วเก็บลง databases ครับ เมื่อมีผู้ใช้ต้องการ decryption ก็จะมากรอกข้อมูล แต่ระบบไม่ได้มีการถอดรหัสจริงๆครับ เป็นการ query database มากกว่า

ที่มา:
http://www.narisa.com/forums/index.php?showtopic=29150
http://www.thaiseoboard.com/index.php?topic=7417.0;all

Facebook Comment

Recent Posts

Popular post of 7 days

Portal คืออะไรกันนะ???

เรื่องของ ++i กับ i++

[Java] ความแตกต่างระหว่าง Overloading กับ Overriding

Popular

[Java] Java 8 DateTime ใหม่ ไฉไลกว่าเดิม

Portal คืออะไรกันนะ???

[Java] ความแตกต่างระหว่าง Overloading กับ Overriding

มาตรฐานการตั้งชื่อตัวแปร (Naming Convention)

เรื่องของ ++i กับ i++

ลืมรหัสปลดล็อค Android เข้าเครื่องไม่ได้ มีทางออกครับ

Port Forwarding สำหรับคนใช้ AIS Fibre

[Java] Java Static Variable และ Static Method

วิธีการสมัคร Apple Developer Program และ Enterprise Program ฉบับลงมือเอง

Android Auto & Apple Carplay คืออะไร ใช้งานยังไง