Băm MD5
Công cụ băm MD5 trực tuyến miễn phí. Chế độ văn bản/tệp/hàng loạt/HMAC-MD5, UTF-8/Latin1, chữ hoa, nhóm 8 ký tự. ⚠️ MD5 đã bị phá — KHÔNG sử dụng để lưu trữ mật khẩu.
Đề xuất Liên quan
MD5 là gì?
MD5 (Message-Digest Algorithm 5) là hàm băm 128 bit được thiết kế bởi Ronald Rivest vào năm 1991 (RFC 1321), tạo ra tóm tắt thập lục phân 32 ký tự cố định từ đầu vào tùy ý. Từng được sử dụng rộng rãi cho chữ ký số, xác minh chứng chỉ và lưu trữ mật khẩu, MD5 đã bị phá bởi tấn công va chạm của Wang và cộng sự vào năm 2004, và phần mềm độc hại Flame đã lạm dụng va chạm MD5 để giả mạo chứng chỉ CA đáng tin cậy vào năm 2008.
**Trạng thái bảo mật**: NIST chính thức từ chối MD5 cho chữ ký số trong SP 800-131A (2011). Tuy nhiên, MD5 vẫn hữu ích cho các kịch bản không liên quan đến bảo mật: kiểm tra toàn vẹn tệp chống hỏng ngẫu nhiên, loại bỏ trùng lặp dữ liệu và khóa bộ đệm. Câu hỏi chính: kẻ tấn công có hưởng lợi từ việc tạo va chạm không? Nếu không, tốc độ của MD5 là một lợi thế.
**KHÔNG BAO GIỜ sử dụng MD5 để lưu trữ mật khẩu**: MD5 cực kỳ nhanh (hàng tỷ băm/giây trên GPU), cho phép phá mật khẩu phổ biến ngay lập tức bằng tấn công từ điển. Lưu trữ mật khẩu PHẢI sử dụng bcrypt, scrypt hoặc Argon2 — các hàm băm chậm với hệ số chi phí có thể điều chỉnh làm cho tấn công từ điển trở nên không khả thi.
**HMAC-MD5 vẫn an toàn**: mặc dù MD5 thông thường đã bị phá, HMAC-MD5 (Mã xác thực thông điệp dựa trên băm có khóa) vẫn an toàn khi khóa không được biết, vì cấu trúc HMAC không phụ thuộc trực tiếp vào khả năng kháng va chạm của băm cơ sở. Tuy nhiên, việc chuyển sang HMAC-SHA256 được khuyến nghị.
Công cụ sử dụng triển khai MD5 JavaScript thuần túy (Web Crypto API không còn hỗ trợ MD5). Tất cả các phép tính được thực hiện cục bộ trong trình duyệt của bạn — tệp sử dụng đọc tăng dần theo phân đoạn và không bao giờ được tải lên máy chủ.
Trường hợp sử dụng
- Toàn vẹn tệp: tính MD5 sau khi tải xuống để so sánh với tổng kiểm chính thức
- Tạo tóm tắt hàng loạt cho tệp cấu hình hoặc ghi chú phát hành
- Ký HMAC-MD5 cho tích hợp hệ thống cũ
- Loại bỏ trùng lặp dữ liệu qua so sánh MD5 nhanh
- Tạo khóa bộ đệm làm định danh duy nhất ngắn
- Giáo dục: hiểu các thuật toán băm bằng cách so sánh đầu ra MD5/SHA-1/SHA-256
Cách Sử dụng
- Chọn chế độ: Văn bản, Tệp, Hàng loạt hoặc HMAC-MD5
- Cấu hình tùy chọn: mã hóa, chữ hoa, nhóm 8 ký tự
- Nhập văn bản, tải tệp lên hoặc dán nội dung hàng loạt
- Sao chép kết quả băm để xác minh hoặc tập lệnh
Tính năng
- Bốn chế độ: Văn bản, Tệp, Hàng loạt theo dòng và HMAC-MD5, bao gồm các kịch bản tổng kiểm phổ biến
- Mã hóa UTF-8/Latin1 có thể chọn cho các đầu vào hệ thống khác nhau
- Hiển thị chữ hoa và nhóm 8 ký tự để dễ đọc
- Băm phân đoạn tệp: đọc tăng dần cho tệp lớn ngăn ngừa sự cố bộ nhớ
- Chế độ hàng loạt: mỗi dòng được băm độc lập với đầu ra gốc→băm
- Sao chép kết quả một cú nhấp
Ví dụ mã
MD5/Hashing in JavaScript (Web Crypto supports SHA, MD5 needs library)
// Note: Web Crypto API does NOT support MD5 (deprecated)
// Use SHA-256 instead for new projects
async function sha256(message) {
const msgBuffer = new TextEncoder().encode(message);
const hashBuffer = await crypto.subtle.digest('SHA-256', msgBuffer);
return Array.from(new Uint8Array(hashBuffer)).map(b => b.toString(16).padStart(2,'0')).join('');
}
sha256('Hello World').then(console.log);
// MD5 in Node.js using crypto module
const crypto = require('crypto');
const md5 = crypto.createHash('md5').update('Hello World').digest('hex');
console.log(md5); // b10a8db164e0754105b7a99be72e3fe5MD5 Hashing in Python
import hashlib
text = 'Hello World'
md5_hash = hashlib.md5(text.encode('utf-8')).hexdigest()
print(md5_hash) # b10a8db164e0754105b7a99be72e3fe5
# File MD5 (chunked for large files)
def md5_file(filepath, chunk_size=8192):
md5 = hashlib.md5()
with open(filepath, 'rb') as f:
while chunk := f.read(chunk_size):
md5.update(chunk)
return md5.hexdigest()
# HMAC-MD5
import hmac
hmac_md5 = hmac.new(b'secret-key', b'Hello World', hashlib.md5).hexdigest()
print(hmac_md5)MD5 Hashing in Java
import java.security.MessageDigest;
import java.nio.charset.StandardCharsets;
public class MD5Example {
public static String md5(String input) throws Exception {
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] hash = md.digest(input.getBytes(StandardCharsets.UTF_8));
StringBuilder sb = new StringBuilder();
for (byte b : hash) sb.append(String.format("%02x", b));
return sb.toString();
}
public static void main(String[] args) throws Exception {
System.out.println(md5("Hello World"));
// b10a8db164e0754105b7a99be72e3fe5
}
}
// Note: Use SHA-256 for new code: MessageDigest.getInstance("SHA-256")Câu hỏi Thường gặp
MD5 thường được dùng để làm gì?
MD5 thường được sử dụng để kiểm tra toàn vẹn tệp (ví dụ: xác minh tải xuống), tạo tóm tắt nhanh, tương thích hệ thống cũ, khóa bộ đệm và loại bỏ trùng lặp dữ liệu trong các kịch bản không liên quan đến bảo mật. MD5 tạo ra 128 bit (32 ký tự thập lục phân) và cực kỳ nhanh, phù hợp cho các kịch bản xác minh không quan trọng.
MD5 so với SHA-256?
MD5 tạo ra 128 bit (32 hex), cực kỳ nhanh nhưng đã bị phá; SHA-256 tạo ra 256 bit (64 hex), chậm hơn nhưng không có tấn công va chạm thực tế và được ưu tiên cho các ứng dụng quan trọng.
Công cụ SHA-256Tại sao MD5 không an toàn cho mật khẩu?
MD5 cực kỳ nhanh — GPU hiện đại có thể tính toán hàng tỷ băm mỗi giây, và bảng cầu vồng phá vỡ các mật khẩu phổ biến ngay lập tức. Sử dụng bcrypt, scrypt hoặc Argon2 để lưu trữ mật khẩu.
Trình tạo mật khẩuMD5 đã bị phá — tôi còn có thể sử dụng nó không?
Tuyệt đối KHÔNG cho bảo mật (chữ ký số, mật khẩu, TLS). Nhưng cho các ứng dụng không liên quan đến bảo mật (kiểm tra hỏng tệp, loại bỏ trùng lặp, khóa bộ đệm) MD5 vẫn phù hợp, vì kẻ tấn công không có động cơ tạo va chạm.
Băm MD5 có thể 'giải mã' được không?
MD5 là hàm một chiều và về mặt toán học không thể đảo ngược, nhưng bảng cầu vồng và tấn công từ điển có thể khôi phục mật khẩu yếu trong vài giây. Vì vậy MD5 không bao giờ nên được sử dụng để lưu trữ mật khẩu.
Tệp lớn có gây treo không?
Không. Công cụ sử dụng đọc tăng dần theo phân đoạn — tệp không được tải hoàn toàn vào bộ nhớ, vì vậy ngay cả tệp nhiều gigabyte cũng được xử lý mượt mà với giao diện phản hồi.
HMAC-MD5 là gì so với MD5 thông thường?
HMAC-MD5 là băm có khóa yêu cầu khóa bí mật. Mặc dù MD5 thông thường đã bị phá, HMAC-MD5 vẫn an toàn khi khóa không được biết (mặc dù khuyến nghị chuyển sang HMAC-SHA256).
Trình tạo HMACThuật ngữ
- Hàm băm (Hash Function)
- Hàm toán học ánh xạ đầu vào độ dài tùy ý thành đầu ra độ dài cố định. Các hàm băm tốt cung cấp tính một chiều, kháng va chạm và hiệu ứng tuyết lở.
- Tấn công va chạm (Collision Attack)
- Tìm hai đầu vào khác nhau tạo ra cùng đầu ra băm. Va chạm MD5 đã được trình diễn bởi Wang và cộng sự vào năm 2004, cho phép giả mạo chữ ký số.
- Tấn công tiền ảnh (Preimage Attack)
- Tìm một đầu vào tạo ra đầu ra băm cụ thể. Khó hơn va chạm nhưng nghiên cứu mới năm 2024 đã làm suy yếu đáng kể khả năng kháng tiền ảnh của MD5.
- Bảng cầu vồng (Rainbow Table)
- Bảng tra cứu băm→văn bản gốc được tính trước để phá nhanh các băm mật khẩu yếu. Muối đánh bại bảng cầu vồng.
- HMAC (Hash-based Message Authentication Code)
- Mã xác thực thông điệp dựa trên băm sử dụng khóa bí mật cho tính toàn vẹn/xác thực thông điệp. HMAC-MD5 và HMAC-SHA256 là các biến thể phổ biến.Trình tạo HMAC
- bcrypt
- Thuật toán băm mật khẩu chậm với muối tích hợp và hệ số chi phí có thể điều chỉnh, làm cho tấn công từ điển trở nên cực kỳ tốn kém.
- Tổng kiểm (Checksum)
- Giá trị cố định nhỏ được sử dụng để xác minh toàn vẹn dữ liệu. MD5, SHA-1, SHA-256 thường được sử dụng làm tổng kiểm để phát hiện hỏng hóc trong quá trình truyền.
- Hiệu ứng tuyết lở (Avalanche Effect)
- Thay đổi nhỏ trong đầu vào (thậm chí 1 bit) gây ra thay đổi lớn và không thể đoán trước trong đầu ra băm. MD5 vẫn có đặc tính tuyết lở tốt, góp phần vào sự hữu ích liên tục của nó trong các kiểm tra không liên quan đến bảo mật.
- RFC 1321
- Tiêu chuẩn chính thức của MD5, được gửi lên IETF bởi Ronald Rivest vào năm 1992, mô tả các bước thuật toán và vector kiểm tra.
- Băm phân đoạn (Chunked Hashing)
- Xử lý tệp lớn theo từng khối thay vì tải toàn bộ tệp vào bộ nhớ, với cập nhật tăng dần trạng thái băm.
So sánh các thuật toán băm phổ biến
| Thuật toán | Bit đầu ra | Độ dài Hex | Bảo mật | Tốc độ | Sử dụng đề xuất |
|---|---|---|---|---|---|
MD5 | 128 bit | 32 ký tự | ❌ Đã bị phá (va chạm/tiền ảnh) | Cực kỳ nhanh | Tổng kiểm tệp, loại bỏ trùng lặp, khóa bộ đệm |
SHA-1 | 160 bit | 40 ký tự | ❌ Va chạm (2017) | Nhanh | Git, tương thích hệ thống cũ |
SHA-256 | 256 bit | 64 ký tự | ✅ An toàn | Trung bình | Chữ ký số, chứng chỉ, blockchain |
SHA-512 | 512 bit | 128 ký tự | ✅ An toàn | Nhanh (64-bit) | Kịch bản bảo mật cao, suy ra khóa |
bcrypt | - | 60 ký tự | ✅ Chuyên biệt cho mật khẩu | Chậm (có thể điều chỉnh) | Lưu trữ mật khẩu |
Dòng thời gian sự cố bảo mật MD5
| Năm | Sự kiện | Tác động |
|---|---|---|
1991 | Ron Rivest thiết kế MD5 (RFC 1321) | Thay thế MD4 và trở thành thuật toán băm tiêu chuẩn |
1996 | Phát hiện lỗi giả va chạm đầu tiên trong MD5 | Cộng đồng học thuật bày tỏ lo ngại |
2004 | Nhóm của Wang Xiaoyun trình diễn tấn công va chạm MD5 | Bảo mật chữ ký số MD5 hoàn toàn bị phá vỡ |
2008 | Phần mềm độc hại Flame giả mạo chứng chỉ CA qua va chạm MD5 | NIST chính thức từ chối MD5 cho chữ ký số |
2011 | NIST SP 800-131A chính thức cấm MD5 cho mục đích bảo mật | Hệ thống chính phủ Mỹ loại bỏ dần MD5 |
2024 | Công bố bài báo tấn công tiền ảnh mới | Phòng tuyến cuối cùng của MD5 (kháng tiền ảnh) bị phá vỡ |
Authoritative References
- So sánh chuỗi bảo mật
- Chuyển Đổi Nhị Phân
- Mật Mã Caesar
- Mã Morse
- Chuyển Đổi Hex
- Video sang Base64
- Base64 Sang Video
- Ảnh sang Base64
- Base64 sang ảnh
- Văn bản sang Base64
- Base64 Sang Văn Bản
- Trình kiểm tra hash tệp
- Tệp Sang Base64
- Base64 Sang Tệp
- Chuyển đổi Âm thanh sang Base64
- Base64 sang Âm thanh
- Mã hóa và giải mã AES
- Mã Hóa Giải Mã DES
- Bộ Mã Hóa Giải Mã Base32
- Base58 mã hóa và giải mã
- Mã hóa Base64
- Giải mã Base64
- So sánh Base64
- Chia Base64
- Base64 gộp nhiều dòng
- Định dạng Base64
- Kiểm Tra Định Dạng Base64
- Mã hóa Base64 hàng loạt
- Giải mã Base64 Hàng loạt
- Dọn dẹp Base64
- Xử lý padding Base64
- Thống Kê Độ Dài Base64
- Base64 Sang Hex
- Chuyển đổi Base64 DataURL
- Công cụ chuyển đổi Base64-Hex
- Bộ Mã Hóa Base85
- Tạo & Xác minh HMAC
- PBKDF2 Phái sinh khóa
- Băm MD5
- Hash SHA-256
- Băm SHA1
- Băm SHA512
- Công cụ JWT
- Mã hóa và giải mã HTML
- Escape Unicode
- Mã hóa URL
- URL Safe Base64
- MIME Base64
- Làm rối Java
- Làm rối JS
- Làm rối PHP
- Làm rối Python