Hướng dẫn dùng 123456 md5 trong PHP

Bạn nhập chuỗi cần mã hóa md5, sau đó nhấn nút “Mã hóa”. Kết quả sẽ được hiển thị ở bên dưới.

Bạn đang xem: Giải mã md5 php


I. Mã hóa MD5 là gì?

MD5 là viết tắt của Message-Digest algorithm 5 – Giải thuật Tiêu hóa tin 5, là một hàm băm được sử dụng phổ biến với giá trị Hash dài 128-bit. MD5 được thiết kế bởi Giáo sư Ronald Rivestcủa trường Đại học MIT vào năm 1991.

Sau khi mã hóa, MD5 luôn cho ra kết quả là một chuỗi có độ dài cố định 32 ký tự cho dù đầu vào là gì đi nữa, và kết quả này không thể dịch ngược (không thể giải mã) lại được.

Trên lý thuyết, mỗi đầu vào của thuật toán mã hóa md5 sẽ tương ứng với một đầu ra duy nhất. Nhưng thực tế, người ta cũng đã tìm ra một vài lỗ hổng cho thấy rằng mặc dù đầu vào là 2 mẫu khác nhau, nhưng sau khi mã hóa lại cho ra kết quả giống nhau. Tuy nhiên, sự “đụng độ” về đầu ra của thuật toán mã hóa md5 chỉ xảy ra ở một số trường hợp đặc biệt, và nó không đủ để làm người ta thôi sử dụng thuật toán mã hóa này, ngoài ra bạn cũng có thể thêm “muối” để giảm khả năng xảy ra đụng độ (chi tiết sẽ trình bày ở mục 3).

Cụm từ “đụng độ kết quả” ám chỉ với các đầu vào khác nhau nhưng lại cho ra các kết quả giống nhau.

II. Mã hóa MD5 thường dùng để làm gì?

Về cơ bản, MD5 là một hàm băm, vì vậy các ứng dụng của nó thường là để:

2.1 Mã hóa mật khẩu

Do có tính chất không thể dịch ngược, nên MD5 được sử dụng phổ biến để mã hóa mật khẩu.

2.2 Kiểm tra tính toàn vẹn của dữ liệu

Bạn sẽ hiểu hơn khi tham khảo ví dụ sau:

Anh A download một phần mềm X trên internet, nhưng vì một lý do nào đó mà anh A phải download ở một nguồn KHÔNG CHÍNH CHỦ. Anh A lo sợ phần mềm X này đã bị hacker chèn virus. Nhưng may mắn, trên trang chủ của phần mềm X có cung cấp một mã md5 – là kết quả của việc mã hóa toàn bộ phần mềm. Giả sử mã md5 đó là f690e937880ebd98086689b871744a84.Để đảm bảo phần mềm X download ở nguồn không chính chủ kia chưa bị chỉnh sửa gì, hay nói cách khác là giống hệt so với việc download từ nguồn chính chủ. Anh A đã mã hóa phần mềm X vừa download bằng thuật toán md5, sau đó so sánh kết quả với mã md5 của nhà phát hành. Nếu 2 mã giống nhau, anh A có thể tin tưởng rằng phần mềm X này chưa bị chỉnh sửa, bởi trên lý thuyết mỗi đầu vào của md5 sẽ chỉ cho ra 1 kết quả duy nhất. Ngược lại, nếu 2 kết quả khác nhau, thì có nghĩa là phần mềm anh A download đã bị chỉnh sửa khác với phiên bản của nhà phát hành.

Xem thêm: Ripple Là Gì? Đồng Ripple Là Gì Có Nên Đầu Tư Đồng Ripple Năm 2020

Trên là một ví dụ điển hình của việc sử dụng md5 để kiểm tra tính toàn vẹn của dữ liệu.

Với nhưng tập dữ liệu lớn hoặc các tệp tin không phải dạng văn bản thuần túy, thì rất khó để nhận biết liệu có sự thay đổi nào giữa 2 phiên bản hay không. Để làm đơn giản việc so sánh này, người ta sẽ dùng một hàm băm (như VD trên là sử dụng md5) để mã hóa các dữ liệu cần so sánh, sau đó nhận biết sự khác nhau dựa vào việc so sánh các kết quả của hàm băm này. Nếu các kết quả giống nhau, đồng nghĩa là các tệp dữ liệu ban đầu cũng giống nhau và ngược lại.

Các thao tác tương tự như trên còn được gọi là checksum.

Hướng dẫn dùng 123456 md5 trong PHP

Với thủ thuật trên, output sẽ giảm tỉ lệ bị đụng độ (giảm tới múc nào thì mình không rõ).

3.2 Giảm khả năng bị “vét cạn”

Việc thêm muối khi mã hóa, ngoài việc làm giảm lỗi đụng độ kết quả, còn làm giảm nguy cơ output của bạn bị “vét cạn” – brute force.

Mặc dù md5 là một hàm mã hóa không thể dịch ngược, nhưng vì dạng mã hóa này được sử dụng quá phổ biến, mà người ta có thể xây dựng nên một bộ từ điển chứa kết quả mã hóa của các bộ đầu vào phổ biến như 123123, anhyeuem, iloveyou,… Dựa vào từ điển này, mà một số mã md5 có thể bị dịch ngược. Bạn có thể dễ dàng tìm được các công cụ “dịch ngược md5” bằng cách tìm kiếm từ khóa “crack md5” trên google.

Tuy nhiên khi bạn mã hóa kèm theo muối, thì cho dù là các chuỗi có vẻ phổ biến như 123456, abcdef cũng sẽ trở nên vô cùng phức tạp và khó đoán, và điều quan trọng nhất – tỉ lệ nó nằm trong bộ từ điển crack md5 là rất thấp (trừ khi bạn sử dụng “muối” quá đơn giản).

1. Chức năng của hàm md5()

Hàm md5() trong PHP có chức năng mã hóa một chuỗi ký tự thành một chuỗi ký tự khác gồm có 32 ký tự với hàm băm (hash) mật mã học md5. Mỗi ký tự mã hóa được biểu diễn dưới dạng hệ cơ số 16. Do đó, kích thước của chuỗi mã hóa trả về là 128 bit.

Hướng dẫn dùng 123456 md5 trong PHP

Hàm băm md5 có đặc điểm là chỉ mã hóa một chiều, tức là không giải mã ngược lại được.

2. Cú pháp của hàm md5()

md5(string $string, bool $binary = false): string

Trong đó:

    • $string: chuỗi ký tự cần mã hóa có độ dài bất kỳ
    • $binary: tùy chọn, mặc định là false. Nếu đặt là true thì chuỗi mã hóa được trả về là chuỗi nhị phân đã mã hóa.
    • Kết quả trả về là chuỗi có 32 ký tự được biểu diễn dưới dạng hệ cơ số 16.

3. Một số ví dụ sử dụng hàm md5()

Mã hóa với $binary == false

$str = "gochocit.com";
$str = md5($str);//82f994e3d08ae2fe4c7785e31b364454
//hoặc
$str = md5($str, false);//82f994e3d08ae2fe4c7785e31b364454

Mã hóa với $binary == true

$str = "gochocit.com";
$str = md5($str, true);// ����Њ��Lw�� 6DT

Kiểm tra chuỗi md5 với câu lệnh if

$str = 'apple';

if (md5($str) === '1f3870be274f6c49b3e31a0c6728957f') {
    echo "Would you like a green or red apple?";
}

Lưu ý: Không khuyến khích sử dụng hàm md5() để tạo password bảo mật. Tuy rằng, không thể giải mã ngược một chuỗi ký tự được mã hóa md5. Nhưng có thể lưu trữ một cơ sở dữ liệu rất lớn gồm hàng triệu chuỗi ký tự và chuỗi mã hóa md5 của nó. Ví dụ như bảng bên dưới:

Chuỗi ký tự Chuỗi mã hóa md5
123456789 25f9e794323b453885f5181f1b624d0b
apple 1f3870be274f6c49b3e31a0c6728957f
gochocit.com 82f994e3d08ae2fe4c7785e31b364454
….

Khi muốn giải mã chuỗi md5 như 82f994e3d08ae2fe4c7785e31b364454 thì chỉ cần truy xuất trong cơ sở dữ liệu này thì sẽ giải mã được chuỗi ký tự ban đầu.

Đã có rất nhiều website dùng cách này để giải mã md5 như https://md5decrypt.net/, https://www.md5online.org/md5-decrypt.html,… Và chắc chắn đã có rất nhiều cơ sở dữ liệu lưu trữ chuỗi mã hóa md5 như thế. Do đó, rõ ràng mã hóa md5 hiện không quá an toàn để dùng bảo mật tài khoản.

  • Các kiểu dữ liệu cơ bản và kiểu chuỗi (String) trong Java
  • Hiểu rõ về bộ nhớ của biến trong C++
  • Mối liên hệ giữa cấu trúc dữ liệu và giải thuật
  • Các loại ngoại lệ (exceptions) trong Java
  • Cú pháp và cách sử dụng vòng lặp for trong C++

PHP programming

Điều hướng bài viết