Friday, November 1, 2013

Một ví dụ nhỏ cho - mã hóa mật khẩu bằng giải thuật md5

Chào các bạn trong quá trình thực hiện đồ án java desktop application tôi đã nhận khá nhiều câu hỏi của các bạn về các mã hóa mật khẩu trong hệ thống phần mềm của các bạn. Để các bạn có thể tham khảo tôi viết lại thành 1 ví dụ đơn giản bao gồm thêm dữ liệu (đăng ký) có mã hóa mật khẩu và so sánh dữ liệu đã mã hóa (login) bằng giải thuật md5.

Bảng dữ liệu đơn giản Users(username,password,gender)

Giao diện thêm dữ liệu
register

Giao diện so sánh dữ liệu
login

Code mã hóa chuỗi theo giải thuật md5
[sourcecode language="java"]
public static String md5(String msg) {
try {
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(msg.getBytes());
byte byteData[] = md.digest();
//convert the byte to hex format method 1
StringBuffer sb = new StringBuffer();
for (int i = 0; i < byteData.length; i++) {
sb.append(Integer.toString((byteData[i] & 0xff) + 0x100, 16).substring(1));
}
return sb.toString();
} catch (Exception ex) {
return "";
}
}
[/sourcecode]

Khi nhấn vào nút add
[sourcecode language="java"]
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
Connection conn;
conn = DriverManager.getConnection("jdbc:sqlserver://ntdan-lt;user=sa;password=Admin@123;database=Northwind;");
PreparedStatement command = conn.prepareStatement("Insert into Users(username, password,gender) values(?,?,?)");
command.setString(1, txtUser.getText());
command.setString(2, MDI_Java_md5.md5(txtPass.getText()));
command.setInt(3, rdMale.isSelected() == true ? 1 : 0);
command.executeUpdate();

JOptionPane.showMessageDialog(this, "Register OK !");
this.setVisible(false);

} catch (Exception ex) {
Logger.getLogger(FrmAdd.class.getName()).log(Level.SEVERE, null, ex);
}
}
[/sourcecode]
Khi nhấn vào nút login
[sourcecode language="java"]
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
Connection conn;
conn = DriverManager.getConnection("jdbc:sqlserver://ntdan-lt;user=sa;password=Admin@123;database=Northwind;");
PreparedStatement command = conn.prepareStatement("Select * from Users where username=? and password = ?");
command.setString(1, txtUser.getText());
command.setString(2, MDI_Java_md5.md5(txtPass.getText()));
ResultSet rs = command.executeQuery();

if (rs.next()) {
JOptionPane.showMessageDialog(this, "Login OK !");
this.setVisible(false);
} else {
JOptionPane.showMessageDialog(this, "Login fail !");
}

} catch (Exception ex) {
Logger.getLogger(FrmAdd.class.getName()).log(Level.SEVERE, null, ex);
}
}
[/sourcecode]
chúc các bạn thành công.

11 comments:

  1. anh làm như vậy đăng nhập bằng gì anh.mã hóa mỗi lần mỗi khác sao đăng nhập được

    ReplyDelete
  2. Chào bạn.
    Đây là ví dụ tôi cung cấp cho sinh viên và các bạn sinh viên đã sử dụng ok. Chổ khác nhau bạn nói tôi chưa rõ lắm.

    ReplyDelete
  3. Cám ơn a nhiều ạ. Bài viết rất kỹ và hữu ích. Em kích vào like cho a, cơ mà đòi đăng nhập. Nhác tạo tài khoản quá. :p

    ReplyDelete
  4. :D tôi chia sẽ những gì tôi cảm thấy có ích bạn à, cảm ơn lời khen của bạn.

    ReplyDelete
  5. no more question. Thank you. Very useful lessons))

    ReplyDelete

Translate