Có ai biết phương pháp mã hóa MD5 không?

Nguyễn Thành Trung
(nt2)

New Member
Mọi người có ai biết cơ sở lý thuyết của phương pháp mã hóa MD5 không?
 
Em đọc rồi, cũng hiểu được chút ít, nhưng anh có thể giải thích cụ thể hơn 1 chút được không?
 
Tiện thể em hỏi luôn (tò mò thôi) là pass của các thành viên trong HAO được mã hóa bằng thuật toán nào, RSA hay MD5?
 
Nguyễn Thành Trung đã viết:
Tiện thể em hỏi luôn (tò mò thôi) là pass của các thành viên trong HAO được mã hóa bằng thuật toán nào, RSA hay MD5?
:) mật khẩu của H-A-O được mã hóa theo thuật toán, mà anh gọi là "phức hợp". Nguyên tắc của thuật toán này sẽ không được công bố trừ khi em ở trong nhón kỹ thuật :-$ heheh


Dẫn chứng gi? Report nào?
Dẫn chứng bài viết của em, cho report Hiếu sẽ gửi cho anh về một số dự án sẽ thực hiện ấy mà.
 
Nguyễn Thành Trung đã viết:
Tiện thể em hỏi luôn (tò mò thôi) là pass của các thành viên trong HAO được mã hóa bằng thuật toán nào, RSA hay MD5?
Nếu có VBulletin source code, mở file login hoặc file register của VBulletin ra tìm xem có md5 ko là bít ngay.
 
Đặng Trần Hiếu đã viết:
Nguyễn Thành Trung đã viết:
Tiện thể em hỏi luôn (tò mò thôi) là pass của các thành viên trong HAO được mã hóa bằng thuật toán nào, RSA hay MD5?
Nếu có VBulletin source code, mở file login hoặc file register của VBulletin ra tìm xem có md5 ko là bít ngay.


Vậy "biết ngay" là có hay không?
 
VBulletin ko phải là đồ miễn phí ---> ko phải ai muốn xem cũng có mà xem. Và cũng trả lời luôn là "biết ngay" là có sử dụng md5 (Đấy là nếu HAO ko thay đổi code của VBulletin). Tuy nhiên ngoài md5. Dựa vào file register.php, VBulletin đầu tiên sẽ md5 password người dùng, sau đó thêm 3 ký tự bất kỳ vào cuối string sau đó md5 1 phát nữa toàn bộ string nì. Dẫn chứng, tìm trong file ./register.php:
Mã:
$salt = fetch_user_salt(3);
		if (strlen($_POST['password_md5']) == 32)
		{
			$hashedpassword = md5($_POST['password_md5'] . $salt);
		}
		else
		{
			$hashedpassword = md5(md5($_POST['password']) . $salt);
		}
Chứng tỏ VBulletin md5 password sau đó md5 password + $salt ở cuối.
Tìm trong file register.php hàm fetch_user_salt ---> ko thấy ---> nó phải nằm trong 1 trong số các file được include ---> xem ở đầu file register.php:
Mã:
require_once('./global.php');
require_once('./includes/functions_user.php');
require_once('./includes/functions_misc.php');
require_once('./includes/functions_register.php');
Lần lượt tìm trong số các file nì. Đầu tiên tìm ở các file có tên liên quan đến register & user trước vì có khả năng có hàm fetch_user_salt hơn. Tìm file ./includes/functions_user.php, trong file có đoạn code:
Mã:
function fetch_user_salt($length = 3)
{
	$salt = '';
	for ($i = 0; $i < $length; $i++)
	{
		$salt .= chr(rand(32, 126));
	}
	return $salt;
}
Từ đây ---> VBulletin md5 password người dùng sau đó thêm vào cuối md5 string nì 3 ký tự bất kỳ rùi md5 thêm 1 phát nữa. Nhưng để chắc chắn phải check xem trong file register.php lại phải if (strlen($_POST['password_md5']) == 32) và sự khác biệt giữa $_POST['password'] và $_POST['password_md5']. Thử vào đăng ký ở 1 forum bất kỳ sử dụng VBulletin (HAO là 1 ví dụ) sau đó view source. Trong file có đoạn code sau:
Mã:
<form action="register.php" name="register" method="post" onsubmit="return verify_passwords(password, passwordconfirm);">
---> khi người dùng submit registration form ---> sẽ có 1 hàm javascript tên là verify_passwords được chạy với password & passwordconfirm làm đối số.
Thêm vào đó, trong file có đoạn code sau:
Mã:
<input type="hidden" name="password_md5" />
<input type="hidden" name="passwordconfirm_md5" />
---> có 2 hidden field password_md5 & passwordconfirm_md5.
Trong cùng file có 1 đoạn javascript sau:
Mã:
function verify_passwords(password1, password2)
{
	// do various checks, this will save people noticing mistakes on next page
	if (password1.value == '' || password2.value == '')
	{
		alert('Please fill out both password fields.');
		return false;
	}
	else if (password1.value != password2.value)
	{
		alert('The entered passwords do not match.');
		return false;
	}
	else
	{
		
		
		md5hash(password1, document.forms.register.password_md5);
		md5hash(password2, document.forms.register.passwordconfirm_md5);
		
		
		
		return true;
	}
	return false;
}
---> Khi người dùng click submit, sẽ có 1 đoạn javascript được chạy để tự động md5 luôn password người dùng
---> sở dĩ trong file lại phải check độ dài của $_POST['password_md5'] là vì nếu nó = 32 ---> nó là md5 string ---> chỉ việc thêm vào cuối 3 ký tự bất kỳ và md5 lại lần nữa. Tuy nhiên, trong 1 số trường hợp, ví dụ như browser ko support javascript ---> password sẽ ko được md5 ---> phải md5 lại password, thêm 3 ký tự bất kỳ rùi mới md5 lần nữa.
 
Chỉnh sửa lần cuối:
Để mã hóa thành md5 thì chỉ cần đoạn code ngắn cũn, mà sao để giải mã thì phức tạp thế không biết :(
 
Hẹ, vấn đề là VBulletin sử dụng md5 đã sửa đổi.
 
Ờ, thì tức là pass được md5 2 lần chứ gì :-?

Thế muốn decode md5 thì phải làm thế nào Hiếu ?
 
Ko phải md5 2 lần mà là md5 1 lần rùi thêm 1 chuỗi bất kỳ ở cuối sau đó md5 lần nữa. Sử dụng cả JavaScript & PHP.

Chẳng có cách nèo decode md5 cả. Tuy nhiên có cách crack md5 = MD5CRK để tìm 1 string có giá trị MD5 = với string cho sẵn. Tuy nhiên cách nì cũng sẽ tốn rất nhiều thời gian vì nó cũng chỉ là brute force.
 
Ko phải md5 2 lần mà là md5 1 lần rùi thêm 1 chuỗi bất kỳ ở cuối sau đó md5 lần nữa
Ừ sorry, nói thiếu cái vụ thêm mấy kí tự vào cuối, nhưng mà cái này chẳng quan trọng, + thêm 1 giá trị vào thôi mà, không khác mấy so với việc md5 thẳng cái mã md5 (có phải không nhờ :-/).

Chẳng có cách nèo decode md5 cả. Tuy nhiên có cách crack md5 = MD5CRK để tìm 1 string có giá trị MD5 = với string cho sẵn. Tuy nhiên cách nì cũng sẽ tốn rất nhiều thời gian vì nó cũng chỉ là brute force.
À, thế hử ? thế thông thường, khi forum dùng pass md5, pass được ghi trong db thì vẫn là dưới dạng md5 rồi, thế khi thành viên gõ pass để truy cập thi cái pass đó được md5 rồi so sánh với pass trong db, chứ không phải là vấn đề decode md5 ra rồi mới so sánh với pass được nhập vào hả ? :-?
 
Đỗ Việt đã viết:
À, thế hử ? thế thông thường, khi forum dùng pass md5, pass được ghi trong db thì vẫn là dưới dạng md5 rồi, thế khi thành viên gõ pass để truy cập thi cái pass đó được md5 rồi so sánh với pass trong db, chứ không phải là vấn đề decode md5 ra rồi mới so sánh với pass được nhập vào hả ? :-?
Nó được gọi là "Mật" khẩu mà. bị mà hóa rồi cất trong database rồi thì khó có thể giải mã được lắm. giải mã được dễ thế, thì cần quái gì mà hóa nữa, save phéng text cho xong.

Người ta muốn so sánh, thì mã hóa cái mật khẩu cho vào rồi so sánh với mật khẩu đã bị mã hóa được save trong database chứ
 
Hôm nọ xài cái Zip Password Recovery để đoán mật khẩu --> nó estimate thời gian hơn 1 tuần để giải mã xong b-(
 
Mai Thanh Hà đã viết:
Đỗ Việt đã viết:
À, thế hử ? thế thông thường, khi forum dùng pass md5, pass được ghi trong db thì vẫn là dưới dạng md5 rồi, thế khi thành viên gõ pass để truy cập thi cái pass đó được md5 rồi so sánh với pass trong db, chứ không phải là vấn đề decode md5 ra rồi mới so sánh với pass được nhập vào hả ? :-?
Nó được gọi là "Mật" khẩu mà. bị mà hóa rồi cất trong database rồi thì khó có thể giải mã được lắm. giải mã được dễ thế, thì cần quái gì mà hóa nữa, save phéng text cho xong.

Người ta muốn so sánh, thì mã hóa cái mật khẩu cho vào rồi so sánh với mật khẩu đã bị mã hóa được save trong database chứ
Vâng, tức là giống cái em nghĩ, đúng không nhỉ :-/
 
MD5 mã hóa bất kì message nào cũng tạo ra 1 string 32 bytes, thế tức là tồn tại 2 message mà sau khi mã hóa thì ra cùng 1 string?
 
Back
Bên trên