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

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 "";
        }
    }

Khi nhấn vào nút add

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);
        }
    }   

Khi nhấn vào nút login

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);
        }
    }   

chúc các bạn thành công.

Một suy nghĩ 19 thoughts on “Một ví dụ nhỏ cho – mã hóa mật khẩu bằng giải thuật md5

  1. thay oi sao em dung dong lap
    for (int i = 0; i < byteData.length; i++) {
    sb.append(Integer.toString((byteData[i] & 0xff) + 0x100, 16).substring(1));
    }
    no ma hoa vao co so du lieu nguyen dai so 0 ..em tinh dung BigInteger duoc khong thay

    Thích

  2. 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

    Thích

Phản hồi