Initializing, please wait a moment

Cách Đọc và So Sánh Hash MD5 Đúng Cách: Hoa Thường, Khoảng Trắng, Định Dạng Hex

Sau khi tạo hash trên MD5 Converter, chuyển cả hai chuỗi sang chữ thường, xóa khoảng trắng, bỏ dấu hai chấm, rồi so sánh tất cả 32 ký tự hex. Chữ hoa, khoảng trắng ở đầu và định dạng hai chấm là khác biệt bề ngoài - chúng khớp nếu 16 byte cơ bản giống nhau.

Độ dài chuỗi hashThuật toánSử dụng phổ biến
32 ký tự hexMD5Kiểm tra toàn vẹn tập tin, checksums cũ
40 ký tự hexSHA-1Đối tượng Git, ký mã cũ
64 ký tự hexSHA-256Tải xuống bảo mật hiện đại, trình quản lý gói

Quyết định trong 30 giây. Hai giá trị MD5 trùng nhau khi, sau khi chuyển cả hai về chữ thường và xóa khoảng trắng cùng dấu cách, 32 ký tự hex trùng nhau theo từng vị trí. Khác biệt về hoa-thường, khoảng trắng, UTF-8 BOM và dấu hai chấm chỉ là hình thức nên vẫn trùng nhau; còn bất kỳ chữ hex nào khác, chiều dài khác 32, hoặc ký tự ngoài `0-9 a-f` nghĩa là dữ liệu vào đã khác. Chi tiết từng trường hợp ở các mục bên dưới.

Hash MD5 thực sự là gì

Hash MD5 là đầu ra của một hàm nhận bất kỳ dữ liệu vào - một chuỗi text, byte của file, một stream từ download - và sinh ra một digest cố định 16 byte (128 bit). Các byte là giá trị canonical: đó là cái "MD5" thực sự là. Chuỗi hexadecimal 32 ký tự bạn thấy trên màn hình chỉ là một mã hóa dễ đọc của 16 byte đó (mỗi byte trở thành hai ký tự hex). Cùng 16 byte đó có thể được viết bằng chữ hoa, chữ thường, hoặc dạng cách nhau bằng dấu hai chấm mà vẫn là CÙNG hash - các byte không đổi (chi tiết từng dạng ở mục dưới).

Để tạo một MD5 mới để so sánh với giá trị kỳ vọng đã xuất bản, dán text gốc vào MD5 Converter: dán chuỗi và copy kết quả. Nếu dữ liệu vào là file thay vì chuỗi, xem MD5 vs SHA-256 - Khi Nào Hash để quyết định tool; quy tắc so sánh bên dưới giống nhau theo cả hai hướng.

Bốn khác biệt hình thức nhưng vẫn trùng nhau

See bon khac biet tham my MD5 van co nghia la khop: chu hoa/thuong, khoang trang, byte-order mark, dau cach.
Bốn khác biệt thẩm mỹ không phải sự không khớp thực sự: chữ hoa/thường, khoảng trắng, tiền tố BOM, dấu cách hai chấm.

Bốn khác biệt thường gặp ở mức màn hình trông giống không trùng nhau nhưng thực ra đại diện cho cùng một digest 16 byte.

  • Chữ hoa vs chữ thường. Hex không phân biệt hoa thường. `D41D8CD98F00B204E9800998ECF8427E` và `d41d8cd98f00b204e9800998ecf8427e` là cùng một hash. Dạng chữ thường là quy ước canonical được đa số công cụ hiện đại dùng, kể cả MD5 Converter miễn phí; một số tool cũ (và nhiều bản release notes in giấy) dùng chữ hoa. Chuyển cả hai về chữ thường trước khi so sánh.
  • Khoảng trắng đầu hoặc cuối. Một khoảng trắng, tab, hoặc xuống dòng sót lại khi copy cùng với hash thì vô hình trên màn hình nhưng phá vỡ compare nghiêm ngặt từng ký tự. Cắt đầu cuối trước khi so sánh.
  • Một byte-order mark (BOM) vô hình. Khi hash kỳ vọng được xuất bản trong file `.txt` lưu dưới dạng UTF-8 với BOM, copy dòng đầu tiên kéo theo một chuỗi 3 byte vô hình (`EF BB BF`) cùng với hash. Compare nhìn như một chuỗi 35 ký tự so với một chuỗi 32 ký tự. Lưu lại file gốc dưới dạng UTF-8 không BOM, hoặc xóa 3 byte đầu của chuỗi đã copy.
  • Định dạng có dấu hai chấm hoặc khoảng trắng chen giữa. Một số công cụ cũ in giá trị thành `d4:1d:8c:d9:8f:00:b2:04:e9:80:09:98:ec:f8:42:7e`. Bỏ các dấu phân tách này trước khi đối chiếu.

Ba dấu hiệu dữ liệu vào không giống nhau

Nếu sau khi làm sạch bốn khác biệt hình thức ở trên mà hai chuỗi vẫn khác nhau, hãy đối chiếu ba dấu hiệu dưới đây.

  • Bất kỳ chữ hex nào khác. MD5 có tính chất avalanche: một khác biệt 1 bit trong dữ liệu vào thường lật khoảng nửa số bit đầu ra. Vì vậy ngay cả một ký tự hex khác ở bất kỳ vị trí nào trong chuỗi 32 ký tự cũng có nghĩa dữ liệu vào không giống nhau. Không có khái niệm "gần giống" cho hash - hoặc mọi ký tự trùng (sau khi làm sạch ở trên) hoặc dữ liệu vào đã khác nhau.
  • Tổng chiều dài khác sau khi làm sạch. Digest hex MD5 chính xác 32 ký tự. Chiều dài khác nghĩa là thuật toán khác: chuỗi hex 40 ký tự là SHA-1; 64 ký tự là SHA-256; 8 ký tự là CRC32 (thường hiển thị ở hệ thập phân, không hex). Nếu "MD5 kỳ vọng" của bạn có 40 hoặc 64 ký tự, người xuất bản dùng thuật toán khác và bạn cần tool khác.
  • Ký tự không-hex. Hex MD5 chỉ chứa `0-9` và `a-f` (hoặc `A-F`). Một `g`, `h`, `z`, hoặc bất kỳ chữ cái nào khác sau `f` không phải chữ hex MD5. Nguyên nhân thường gặp nhất là chuỗi đó là base64 (`/=+` và dải chữ rộng hơn) hoặc base32 (`a-z` và `2-7`) - một cách mã hóa khác của cùng 16 byte, nhưng quy tắc so sánh khi đó khác (trong base64 chữ hoa thường vẫn quan trọng).

Luồng so sánh 5 bước

See nam buoc de so sanh hash MD5 chinh xac: chu thuong, cat khoang trang, bo dau cach, xac nhan 32 chu hex.
Năm bước để so sánh MD5 đáng tin cậy: chữ thường, cắt khoảng trắng, bỏ dấu cách, xác nhận 32 chữ hex.

Cho cả hai hash qua cùng 5 bước và việc so sánh trở nên cơ học.

  1. Chuyển cả hai chuỗi về chữ thường. Bước này xóa khác biệt hoa-thường trong hex.
  2. Cắt khoảng trắng đầu và cuối. Bước này xóa khác biệt về khoảng trắng xung quanh.
  3. Bỏ dấu cách. Xóa mọi `:`, ` ` (khoảng trắng), `-`, hoặc ký tự không-hex khác. Kết quả phải là một chuỗi 32 ký tự chữ hex đơn nhất.
  4. Xác nhận chiều dài là 32 và các ký tự đều nằm trong `0-9 a-f`. Nếu một trong hai phía không qua kiểm tra này, bạn đang so sánh thứ không phải digest hex MD5 (hoặc vẫn còn ô nhiễm BOM / ký tự vô hình; dán chuỗi vào hex inspector để phát hiện).
  5. So sánh từng ký tự. Nếu bước 1-4 cho ra hai chuỗi hex 32 ký tự giống hệt, hash trùng nhau - 16 byte bên dưới là giống nhau và dữ liệu vào là giống nhau. Nếu khác nhau ở bất kỳ vị trí nào, dữ liệu vào khác nhau.

Khi nào MD5 đủ - và khi nào không đủ

MD5 phù hợp cho kiểm tra hư hỏng ngẫu nhiên khi không có kẻ thù: xác nhận download kết thúc không bị bit-rot khi người xuất bản đang kỳ vọng MD5 cùng file; xác minh chuyển file của đồng nghiệp so với MD5 họ gửi trong cùng email. Xác suất hai file không liên quan tạo ra cùng một MD5 ngẫu nhiên là nhỏ không đáng kể. Vì vậy nếu bạn tạo hash trên MD5 Converter và nó trùng với giá trị xuất bản sau luồng 5 bước, file là file người xuất bản muốn.

MD5 KHÔNG phù hợp cho trường hợp đối kháng - lưu mật khẩu, chữ ký bảo mật, chống giả mạo. Các nhà nghiên cứu hiện tạo ra hai file khác nhau cùng một MD5 trong vài giây trên phần cứng thông thường. Với những trường hợp đó, tool đúng là thuật toán khác. Xem MD5 vs SHA-256 - Khi Nào Hash để quyết định thuật toán, Các Lựa Chọn Thay Thế MD5 - bcrypt vs Argon2id vs SHA-256 cho câu trả lời hiện đại về lưu mật khẩu, và Tại Sao MD5 Không Thể Giải Mã cho câu hỏi liên quan "tôi có một MD5 và muốn text gốc".

"Gần trùng" không tồn tại với MD5

Hướng dẫn không khẳng định rằng hash có thể "gần trùng". Hai hash MD5 hoặc trùng nhau chính xác sau khi chuẩn hóa hoa-thường và khoảng trắng, hoặc không. Cách hiểu cảm "hash có lẽ đúng vì trông gần giống nhau" không áp dụng cho MD5: hash hoặc trùng nhau chính xác theo quy tắc chuẩn hóa hoặc không.

Tính chất avalanche của hàm hash khiến đảm bảo này trở thành cơ học: một thay đổi 1 bit trong dữ liệu vào lật khoảng nửa số bit đầu ra, nên một gần-trùng trong hash không bao giờ tương đương gần-trùng trong dữ liệu vào. Nếu hash của bạn từ MD5 Converter khác với giá trị kỳ vọng xuất bản ở bất kỳ chữ hex nào, byte mà bạn hash không phải là byte người xuất bản hash - tải lại file hoặc lấy lại nguồn. Một ký tự hex khác biệt là "dữ liệu vào khác nhau, làm lại toàn bộ", không phải "gần đúng, chỉ làm lại khối cuối".

Các hướng dẫn liên quan về developer và MD5: MD5 vs SHA-256 - Khi Nào Hash (lựa chọn thuật toán), Tại Sao MD5 Không Thể Giải Mã (vì sao MD5 không ngược được), MD5 Sang Text - Tại Sao Không Chuyển Ngược Được (đối tác vận hành), và Các Lựa Chọn Thay Thế MD5 - bcrypt vs Argon2id vs SHA-256 (lựa chọn hiện đại cho sử dụng đối kháng), và link tải xuống không hiện sau khi chuyển đổi - năm cách sửa (nếu công cụ chuyển đổi xong nhưng không hiện link tải xuống).