[Lập trình Java] Mã hóa một chiều với MD5

Share:

android-java

1- Mã hóa 1 chiều là gì?

– Mã hóa một chiều hiểu đơn giản theo đúng nghĩa của nó, tức là một khi đã mã hóa rồi thì không thể giải ngược lại được nữa.
– Đây là phương thức giúp bảo vệ tuyệt đối dữ liệu.
– Dùng để lưu mật khẩu vào Database

2- Ví dụ

– Khi bạn tạo một password là 123123 chẳng hạn, mật khẩu này sẽ được mã hóa 1 chiều thành 1 đoạn code và lưu trong cơ sở dữ liệu.
– Khi bạn nhập mật khẩu vào để đăng nhập, mật khẩu sẽ tự động mã hóa và so sánh với mã hóa đã lưu trong cơ sở dữ liệu. Nếu giống nhau thì đăng nhập được.
– Trong trường hợp nếu database bị hack thì hacker cũng chỉ thấy một đoạn code đã được mã hóa mà không thể decode được.

ma-hoa-md5

3- Mã hóa MD5

– MD5 được dùng trong bảo mật và để kiểm tra độ toàn vẹn của tập tin.
– MD5 được thiết kế bởi ông Ronald Rivest năm 1991 mục đích là thay thế cho hàm băm MD4 trước đó. Vào năm 1996, một lỗ hổng trong MD5 đã được phát hiện; mặc dù không biết lỗ hổng đó có nghiêm trọng hay không nhưng một mã hóa khác đã được đề xuất, như SHA-1 (lúc đó cũng được coi là không an toàn). Đến năm 2004, nhiều lỗ hổng của hệ bảo mật này bị phát hiện khiến cho nó được đặt vào vòng nghi vấn.

4- Khả năng bị tấn công

– Vì MD5 chỉ giúp dò qua dữ liệu 1 lần, nếu có hai tiền tố với cùng bảng băm được dựng nên, thì cùng 1 hậu tố có thể cùng được thêm vào một lúc để khiến cho đụng độ có thể dễ xảy ra. Tức là hai dữ liệu đầu vào (input) X và Y hoàn toàn khác nhau nhưng có thể đầu ra (output) cùng được một md5 hash như nhau . Tuy nhiên xác suất khiến điều này xảy ra khá nhỏ
– Vì những kỹ thuật tìm đụng độ hiện nay cho phép các trạng thái băm trước đó được xác định một cách ngẫu nhiên, có thể tìm thấy xung đột đối với bất kỳ tiền tố mong muốn nào; có nghĩa là, đối bất kỳ một chuỗi các ký tự X cho trước, hai tập tin đụng độ có thể được xác định mà đều bắt đầu với X.
– Tất cả những gì cần để tạo ra hai tập tin đụng độ là một tập tin mẫu, với một khối dữ liệu 128 byte được xếp trên giới hạn 64 byte, có thể thay đổi tự do bằng giải thuật tìm va chạm.

5- Code ví dụ

import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class MD5 {

public static String encryptMD5(String input) {
try {
MessageDigest md = MessageDigest.getInstance(“MD5”);
byte[] messageDigest = md.digest(input.getBytes());
BigInteger number = new BigInteger(1, messageDigest);
String hashtext = number.toString(16);
while (hashtext.length() < 32) {
hashtext = “0” + hashtext;
}
return hashtext;
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e);
}
}

public static void main(String[] args) throws Exception {
System.out.println(“http://android.vn/ – hướng dẫn: thanhlong90.it”);
System.out.println(“———– Mã hóa 1 chiều với MD5 ———–“);
System.out.println(“”);
System.out.println(“Dữ liệu mã hóa: thanhlong90.it”);
System.out.println(“Kết quả đã mã hóa” + encryptMD5(“thanhlong90.it”));
}

}

6- Video kết quả

Share:

Leave a reply