logo
GeekFormat
Đầu vào0 ký tự · 0 byte
示例:
All Hashes (side-by-side)
Computed via Web Crypto API
MD5
32 hex
SHA-1
40 hex
SHA-256
64 hex
SHA-384
96 hex
SHA-512
128 hex

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

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

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

Cách Sử dụng

  1. Chọn chế độ: Văn bản, Tệp, Hàng loạt hoặc HMAC-MD5
  2. Cấu hình tùy chọn: mã hóa, chữ hoa, nhóm 8 ký tự
  3. Nhập văn bản, tải tệp lên hoặc dán nội dung hàng loạt
  4. Sao chép kết quả băm để xác minh hoặc tập lệnh

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-256

Tạ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ẩu

MD5 đã 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 HMAC

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ủ.

术语表

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ánBit đầu raĐộ dài HexBảo mậtTốc độSử dụng đề xuất
MD5128 bit32 ký tự❌ Đã bị phá (va chạm/tiền ảnh)Cực kỳ nhanhTổng kiểm tệp, loại bỏ trùng lặp, khóa bộ đệm
SHA-1160 bit40 ký tự❌ Va chạm (2017)NhanhGit, tương thích hệ thống cũ
SHA-256256 bit64 ký tự✅ An toànTrung bìnhChữ ký số, chứng chỉ, blockchain
SHA-512512 bit128 ký tự✅ An toànNhanh (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ẩuChậ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ămSự kiệnTác động
1991Ron Rivest thiết kế MD5 (RFC 1321)Thay thế MD4 và trở thành thuật toán băm tiêu chuẩn
1996Phát hiện lỗi giả va chạm đầu tiên trong MD5Cộng đồng học thuật bày tỏ lo ngại
2004Nhóm của Wang Xiaoyun trình diễn tấn công va chạm MD5Bảo mật chữ ký số MD5 hoàn toàn bị phá vỡ
2008Phần mềm độc hại Flame giả mạo chứng chỉ CA qua va chạm MD5NIST chính thức từ chối MD5 cho chữ ký số
2011NIST SP 800-131A chính thức cấm MD5 cho mục đích bảo mậtHệ thống chính phủ Mỹ loại bỏ dần MD5
2024Công bố bài báo tấn công tiền ảnh mớiPhòng tuyến cuối cùng của MD5 (kháng tiền ảnh) bị phá vỡ

Code Examples

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); // b10a8db164e0754105b7a99be72e3fe5

MD5 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")

Authoritative References