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.

Advertisements

17 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

    Like

Phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s