Công cụ tính mã băm MD5 là gì?
Công cụ tính mã băm MD5 tạo ra digest MD5 128-bit cho bất kỳ đoạn văn bản nào bạn nhập vào. MD5 (Message-Digest Algorithm 5, được định nghĩa trong RFC 1321) nhận đầu vào có độ dài tùy ý và cho ra một "dấu vân tay" thập lục phân cố định gồm 32 ký tự. Cùng một đầu vào sẽ luôn cho cùng một mã băm, nhưng chỉ cần thay đổi một ký tự duy nhất là kết quả đã hoàn toàn khác.
Cách sử dụng
Gõ hoặc dán văn bản của bạn vào ô nhập liệu rồi gửi đi. Công cụ sẽ mã hóa văn bản thành các byte UTF-8, áp dụng thuật toán MD5 và trả về digest thập lục phân viết thường, cùng với độ dài đầu vào tính theo ký tự và kích thước tính theo byte UTF-8. Để trống ô nhập liệu, bạn sẽ thấy mã băm quen thuộc của chuỗi rỗng.
Giải thích công thức
$$\text{MD5}\!\left(\text{Text}\right) = \text{Hex}_{128}\big(A \Vert B \Vert C \Vert D\big)$$
MD5 là một cấu trúc Merkle–Damgård. Thông điệp được đệm (padding) bằng một byte 0x80, sau đó là các byte 0, cho đến khi độ dài đạt 56 mod 64 byte, và cuối cùng độ dài bit ban đầu được nối thêm dưới dạng giá trị little-endian 64-bit. Thông điệp đã đệm được chia thành các khối 512-bit, mỗi khối được xử lý qua 64 phép toán trải đều trong bốn vòng, sử dụng các hàm phi tuyến, các hằng số theo từng bước được suy ra từ sin, và phép quay trái. Bốn từ trạng thái 32-bit (A, B, C, D) được khởi tạo bằng các giá trị mầm cố định và cập nhật cho mỗi khối; chuỗi nối little-endian cuối cùng của chúng chính là digest.
Ví dụ minh họa
Chuỗi rỗng ("") có 0 byte. Sau khi đệm, nó trở thành một khối 512-bit duy nhất, và MD5 trả về d41d8cd98f00b204e9800998ecf8427e. Văn bản "hello" (5 byte) cho ra mã băm 5d41402abc4b2a76b9719d911017c592.
Câu hỏi thường gặp
MD5 có an toàn không? Không. MD5 đã bị phá vỡ về mặt mật mã — có thể dễ dàng tạo ra các va chạm (collision). Chỉ nên dùng MD5 cho việc kiểm tra checksum và làm dấu vân tay không liên quan đến bảo mật, tuyệt đối không dùng cho mật khẩu hay chữ ký số.
Tại sao số byte lại khác số ký tự? Các ký tự ngoài bảng ASCII chiếm nhiều hơn một byte trong UTF-8, nên một chuỗi emoji 3 ký tự có thể nặng tới vài byte.
Chữ hoa, chữ thường có ảnh hưởng không? Có. "Hello" và "hello" tạo ra hai mã băm hoàn toàn khác nhau.