Trình tạo Hash MD5

Tạo hash MD5 từ bất kỳ văn bản nào

Văn bản nhập

Chạy cục bộ · An toàn để dán thông tin bí mật

Hash MD5

Hash MD5 sẽ xuất hiện ở đây…

MD5 Hashing là gì?

MD5 (Message-Digest Algorithm 5) là hàm băm mật mã tạo ra giá trị băm cố định 128-bit (16 byte) từ bất kỳ đầu vào nào, bất kể kích thước. Được công bố năm 1992 bởi Ronald Rivest dưới dạng RFC 1321, MD5 được thiết kế như phiên bản kế thừa nhanh hơn của MD4 và nhanh chóng trở thành một trong những hàm băm được sử dụng rộng rãi nhất trên internet. Thuật toán xử lý đầu vào theo các khối 512-bit qua bốn vòng, mỗi vòng 16 phép toán, sử dụng hàm phi tuyến khác nhau cho mỗi vòng, tạo ra chữ ký thập lục phân 32 ký tự.

Hàm băm là phép biến đổi một chiều: cho một đầu vào, bạn có thể tính toán giá trị băm ngay lập tức, nhưng chỉ có giá trị băm không thể khôi phục đầu vào gốc. Ngay cả thay đổi một bit trong đầu vào cũng tạo ra giá trị băm hoàn toàn khác — đặc tính này được gọi là hiệu ứng tuyết lở. MD5 ánh xạ không gian đầu vào vô hạn sang không gian đầu ra cố định 128-bit, vì vậy va chạm (hai đầu vào khác nhau tạo ra cùng giá trị băm) được đảm bảo tồn tại về mặt toán học, nhưng hàm băm an toàn phải làm cho việc tìm kiếm chúng không khả thi về mặt tính toán.

Từ năm 2004, các nhà nghiên cứu đã chứng minh các cuộc tấn công va chạm thực tế chống lại MD5, có nghĩa là nó không còn được coi là an toàn cho chữ ký số, chứng chỉ, hoặc bất kỳ ngữ cảnh nào yêu cầu khả năng chống va chạm. Tuy nhiên, MD5 vẫn được sử dụng rộng rãi cho các mục đích phi bảo mật: xác minh tính toàn vẹn của tệp sau khi tải xuống, tạo khóa bộ nhớ đệm, loại bỏ trùng lặp nội dung và tạo định danh xác định từ chuỗi. Đối với những ứng dụng này, tốc độ của thuật toán và sự hỗ trợ thư viện phổ biến khiến nó trở thành lựa chọn thực tế. Năm 2008, Marc Stevens và các đồng nghiệp công bố tấn công va chạm tiền tố tùy chọn, có nghĩa là kẻ tấn công có thể tạo hai tài liệu với tiền tố tùy chọn bất kỳ có cùng giá trị băm. Kỹ thuật này đã được trình diễn tại Chaos Communication Congress 2008 bằng cách xây dựng chứng chỉ Tổ chức chứng nhận giả mạo. Phần mềm độc hại Flame năm 2012 sau đó đã khai thác va chạm tiền tố tùy chọn để giả mạo chứng chỉ ký mã Microsoft, cho phép phần mềm độc hại giả dạng gói Windows Update hợp lệ. Các cuộc khai thác thực tế này xác nhận rằng thuật toán đã bị phá vỡ về mặt mật mã cho bất kỳ ứng dụng nào dựa trên sự tin cậy và không nên được tin cậy khi kẻ tấn công có thể ảnh hưởng đến các đầu vào được băm.

Tại sao sử dụng Trình tạo MD5 này?

Tạo giá trị băm MD5 ngay lập tức mà không cần cài đặt bất cứ thứ gì hay viết mã. Dán văn bản và nhận giá trị băm hex 32 ký tự theo thời gian thực.

Băm tức thì
Kết quả cập nhật khi bạn gõ. Không cần nhấn nút, không cần chờ đợi — giá trị băm MD5 xuất hiện từng ký tự khi bạn chỉnh sửa đầu vào.
🔒
Xử lý ưu tiên quyền riêng tư
Tất cả quá trình băm chạy cục bộ trong trình duyệt của bạn bằng JavaScript. Văn bản đầu vào của bạn không bao giờ rời khỏi thiết bị và không bao giờ được gửi đến bất kỳ máy chủ nào.
📋
Sao chép một cú nhấp
Sao chép giá trị băm vào bảng tạm với một cú nhấp. Chuyển đổi giữa đầu ra hex chữ thường và chữ hoa để phù hợp với định dạng hệ thống của bạn.
🔍
Không cần tài khoản
Không đăng ký, không đăng nhập, không giới hạn sử dụng. Mở trang và bắt đầu băm ngay. Hoạt động trên bất kỳ thiết bị nào có trình duyệt hiện đại.

Các trường hợp sử dụng MD5

Phát triển Frontend
Tạo giá trị băm cache-busting cho tài nguyên tĩnh. Thêm giá trị băm MD5 của nội dung tệp vào URL CSS và JavaScript để trình duyệt tải phiên bản cập nhật khi nội dung thay đổi.
Kỹ thuật Backend
Tạo khóa bộ nhớ đệm xác định từ các tham số truy vấn phức tạp hoặc nội dung yêu cầu. Giá trị băm MD5 tạo ra các khóa cố định và độ dài ngắn hoạt động tốt với Redis, Memcached và các lớp bộ nhớ đệm CDN.
DevOps & CI/CD
Xác minh tính toàn vẹn của tệp sau khi chuyển bằng cách so sánh checksum MD5. Nhiều kho lưu trữ gói và kho lưu trữ tạo phẩm công bố giá trị băm MD5 cùng với bản tải xuống để xác minh nhanh chóng.
Kiểm tra & Đảm bảo chất lượng
So sánh giá trị băm MD5 của phản hồi API, bản sao cơ sở dữ liệu hoặc tệp cấu hình để phát hiện thay đổi không mong muốn giữa các lần chạy kiểm tra mà không cần so sánh toàn bộ nội dung.
Kỹ thuật dữ liệu
Loại bỏ trùng lặp bản ghi trong các quy trình ETL bằng cách tính giá trị băm MD5 của nội dung hàng. Hai hàng có cùng giá trị băm là ứng viên để loại bỏ trùng lặp, giảm chi phí lưu trữ và xử lý.
Học tập & Giáo dục
Thử nghiệm với các hàm băm để hiểu các phép biến đổi một chiều, hiệu ứng tuyết lở và tại sao khả năng chống va chạm quan trọng đối với bảo mật. MD5 là hàm băm đơn giản nhất được biết đến rộng rãi để nghiên cứu.

MD5 so với các thuật toán băm khác

MD5 là thuật toán nhanh nhất và ngắn nhất trong số các thuật toán băm phổ biến, nhưng cung cấp bảo đảm an toàn yếu nhất. Bảng dưới đây so sánh kích thước giá trị băm, tiêu chuẩn và các trường hợp sử dụng phù hợp cho từng thuật toán.

Thuật toánKích thước giá trị bămĐộ dài HexTiêu chuẩnPhù hợp nhất cho
MD5128 bits32 hex chars1992 / RFC 1321Checksums, non-security fingerprints
SHA-1160 bits40 hex chars1995 / RFC 3174Legacy git commits (being replaced)
SHA-256256 bits64 hex chars2001 / FIPS 180-4TLS certificates, blockchain, JWTs
SHA-384384 bits96 hex chars2001 / FIPS 180-4Government systems, higher security margin
SHA-512512 bits128 hex chars2001 / FIPS 180-4Digital signatures, HMAC with large keys
SHA-3256 bits64 hex chars2015 / FIPS 202Post-quantum readiness, backup standard
BLAKE3256 bits64 hex chars2020High-performance checksums, Merkle trees

MD5 hoạt động như thế nào

MD5 xử lý đầu vào qua cấu trúc Merkle-Damgård: thông điệp được đệm thành bội số của 512 bit, chia thành các khối, và mỗi khối được đưa qua bốn vòng gồm 16 phép toán bit trộn đầu vào với các hằng số dẫn xuất từ sin đã được tính trước. Kết quả là trạng thái 128-bit trở thành giá trị băm cuối cùng.

Mỗi vòng áp dụng một hàm phụ trợ phi tuyến riêng biệt cho ba trong bốn từ trạng thái 32-bit (A, B, C, D). Vòng 1 sử dụng F(B,C,D) = (B AND C) OR (NOT B AND D) — bộ chọn điều kiện bit. Vòng 2 sử dụng G(B,C,D) = (B AND D) OR (C AND NOT D) — bộ chọn bổ sung. Vòng 3 sử dụng H(B,C,D) = B XOR C XOR D — hàm chẵn lẻ. Vòng 4 sử dụng I(B,C,D) = C XOR (B OR NOT D) — bộ kết hợp bất đối xứng. Bốn hàm này đảm bảo mỗi bit của đầu vào ảnh hưởng đến giá trị băm đầu ra, tạo ra hiệu ứng tuyết lở khiến các thay đổi nhỏ trong đầu vào gây ra những thay đổi lớn và không thể đoán trước trong giá trị băm kết quả.

Input: "hello world"
MD5: 5eb63bbbe01eeed093cb22bb8f5acdc3
(128 bits = 16 bytes = 32 hex characters)

Thuật toán tiến hành theo năm giai đoạn: (1) thêm bit 1, sau đó các bit 0, cho đến khi độ dài thông điệp là 448 mod 512; (2) thêm độ dài thông điệp gốc dưới dạng số nguyên 64-bit little-endian; (3) khởi tạo bốn biến trạng thái 32-bit (A, B, C, D) với các hằng số cố định; (4) xử lý mỗi khối 512-bit qua 64 phép toán sử dụng bốn hàm phi tuyến (F, G, H, I), mỗi vòng gồm 16 phép toán; (5) cộng trạng thái kết quả vào tổng cộng dồn và xuất giá trị băm 128-bit cuối cùng theo thứ tự byte little-endian.

Ví dụ mã

Cách tạo giá trị băm MD5 trong các ngôn ngữ và môi trường phổ biến. Lưu ý rằng MD5 không có sẵn trong Web Crypto API của trình duyệt — hãy sử dụng thư viện hoặc Node.js.

JavaScript (Web Crypto — browser & Node.js)
// MD5 is not available in Web Crypto API (it only supports SHA-*)
// Use a library like 'js-md5' or the Node.js crypto module

// Node.js (built-in crypto)
const crypto = require('crypto')
const hash = crypto.createHash('md5').update('hello world').digest('hex')
console.log(hash) // → "5eb63bbbe01eeed093cb22bb8f5acdc3"

// With Unicode input
crypto.createHash('md5').update('cafe\u0301').digest('hex')
// → "4fad076bae205e95bec9dacea498e2ab"
Python
import hashlib

# Basic MD5 hash
result = hashlib.md5(b'hello world').hexdigest()
print(result)  # → "5eb63bbbe01eeed093cb22bb8f5acdc3"

# Hash a string (must encode to bytes first)
text = 'hello world'
hashlib.md5(text.encode('utf-8')).hexdigest()
# → "5eb63bbbe01eeed093cb22bb8f5acdc3"

# Hash a file
with open('file.bin', 'rb') as f:
    md5 = hashlib.md5()
    for chunk in iter(lambda: f.read(8192), b''):
        md5.update(chunk)
    print(md5.hexdigest())
Go
package main

import (
    "crypto/md5"
    "fmt"
)

func main() {
    data := []byte("hello world")
    hash := md5.Sum(data)
    fmt.Printf("%x\n", hash)
    // → 5eb63bbbe01eeed093cb22bb8f5acdc3
}
CLI (Linux / macOS)
# Using md5sum (Linux) or md5 (macOS)
echo -n "hello world" | md5sum
# → 5eb63bbbe01eeed093cb22bb8f5acdc3  -

# macOS
echo -n "hello world" | md5
# → 5eb63bbbe01eeed093cb22bb8f5acdc3

# Hash a file
md5sum package.json
# → a1b2c3d4e5f6...  package.json

# Using openssl (cross-platform)
echo -n "hello world" | openssl md5
# → MD5(stdin)= 5eb63bbbe01eeed093cb22bb8f5acdc3

Câu hỏi thường gặp

MD5 có còn an toàn để sử dụng không?
Không an toàn cho các ứng dụng nhạy cảm về bảo mật như chữ ký số, chứng chỉ TLS hoặc băm mật khẩu. Các cuộc tấn công va chạm thực tế đã được chứng minh từ năm 2004, và các cuộc tấn công va chạm tiền tố tùy chọn hiện có thể thực hiện trong vài giây trên phần cứng thông thường. Đối với các ứng dụng phi bảo mật — checksum, khóa bộ nhớ đệm, loại bỏ trùng lặp nội dung — thuật toán vẫn là lựa chọn thực tế và được hỗ trợ rộng rãi.
Sự khác biệt giữa MD5 và SHA-256 là gì?
Thuật toán MD5 tạo ra giá trị băm 128-bit (32 ký tự hex) và dễ bị tổn thương bởi các cuộc tấn công va chạm. SHA-256 tạo ra giá trị băm 256-bit (64 ký tự hex) và không có cuộc tấn công thực tế nào được biết đến. SHA-256 chậm hơn khoảng 30-40% so với thuật toán cũ hơn trên cùng phần cứng, nhưng biên độ an toàn bổ sung khiến nó trở thành lựa chọn mặc định cho bất kỳ ứng dụng nào cần xác minh tính toàn vẹn chống lại sự giả mạo.
Bạn có thể đảo ngược giá trị băm MD5 về đầu vào gốc không?
Không. Hàm băm này là một chiều theo thiết kế — nó loại bỏ thông tin trong quá trình băm. Tuy nhiên, đối với các đầu vào ngắn hoặc phổ biến, kẻ tấn công có thể sử dụng bảng rainbow (ánh xạ giá trị băm sang văn bản thuần đã được tính trước) hoặc vũ phu để tìm đầu vào gốc. Đây là lý do tại sao không bao giờ nên sử dụng nó để lưu trữ mật khẩu. Hãy sử dụng bcrypt, scrypt hoặc Argon2 thay thế.
Tại sao các công cụ khác nhau đôi khi tạo ra giá trị băm MD5 khác nhau cho cùng một văn bản?
Nguyên nhân phổ biến nhất là sự khác biệt mã hóa. Thuật toán hoạt động trên byte, không phải ký tự. Chuỗi 'hello' tạo ra các giá trị băm khác nhau khi được mã hóa dưới dạng UTF-8 so với UTF-16 so với Latin-1. Vấn đề thường gặp khác là dòng mới ở cuối: echo trong hầu hết các shell thêm dòng mới (\n) trừ khi bạn sử dụng echo -n. Luôn xác minh các byte chính xác đang được băm.
Mất bao lâu để tính toán giá trị băm MD5?
Thuật toán này cực kỳ nhanh. Trên phần cứng hiện đại, nó xử lý dữ liệu ở tốc độ 3-6 GB/s trên một lõi CPU. GPU có thể tính toán hàng tỷ checksum mỗi giây. Tốc độ này là ưu điểm cho xác minh tệp nhưng là bất lợi cho băm mật khẩu, nơi các thuật toán chậm hơn (bcrypt, Argon2) được ưu tiên đặc biệt vì chúng chống lại các cuộc tấn công vũ phu.
Va chạm MD5 là gì và tại sao nó quan trọng?
Va chạm xảy ra khi hai đầu vào khác nhau tạo ra cùng giá trị băm. Năm 2004, Xiaoyun Wang đã chứng minh va chạm thực tế đầu tiên chống lại MD5. Đến năm 2012, phần mềm độc hại Flame đã khai thác va chạm để giả mạo chứng chỉ ký mã Microsoft. Ngày nay, va chạm tiền tố giống nhau có thể được tính toán trong chưa đầy một phút. Điều này khiến thuật toán không phù hợp cho bất kỳ ứng dụng nào dựa vào khả năng chống va chạm, chẳng hạn như chữ ký số hoặc ghim chứng chỉ.
Tôi nên sử dụng MD5 hay CRC32 cho checksum tệp?
Checksum này là lựa chọn tốt hơn CRC32 để xác minh tính toàn vẹn tệp. CRC32 là mã phát hiện lỗi 32-bit được thiết kế để phát hiện sự hỏng hóc ngẫu nhiên trong quá trình truyền, không phải sự giả mạo có chủ ý. Không gian đầu ra nhỏ của nó có nghĩa là va chạm rất dễ dàng để tạo ra. MD5 cung cấp giá trị băm 128-bit với khả năng chống va chạm ngẫu nhiên mạnh hơn nhiều. Đối với các tình huống đối kháng (xác minh tải xuống từ các nguồn không đáng tin cậy), hãy sử dụng SHA-256 thay thế.