Initializing, please wait a moment

MD5 vs SHA-256 - khi nào dùng mỗi hàm băm


MD5 và SHA-256 đều tạo ra đầu ra có độ dài cố định từ bất kỳ đầu vào nào, nhưng chỉ SHA-256 an toàn trước đối đầu thủ địch. Khả năng chống va chạm của MD5 thất bại năm 2004. Với chữ ký số, hãy dùng SHA-256. Với kiểm tra toàn vẹn không đối địch, MD5 vẫn ổn.


Một hàm băm thực sự làm gì

Một hàm băm thực sự làm gì trong hướng dẫn MD5 vs SHA-256 là biến mọi đầu vào thành văn bản độ dài cố định - cùng byte luôn cho cùng digest, đổi một bit sẽ đổi toàn bộ kết quả.

MD5 trả về 128 bit (32 ký tự hex). SHA-256 trả về 256 bit (64 ký tự hex). Cả hai đều xác định. Cả hai đều nhanh. Cả hai không tiết lộ gì về khôi phục đầu vào từ đầu ra.


So sánh cạnh nhau

So sánh cạnh nhau trong MD5 vs SHA-256: MD5 128-bit và đã bị phá collision; SHA-256 256-bit và vẫn là mặc định cho toàn vẹn và chữ ký năm 2026.

See MD5 at a glance: 128-bit digest, designed 1991 by Ron Rivest, MD4 lineage, and known collision resistance breaks.
MD5 at a glance: four key properties before you decide whether to use it or SHA-256.
Thuộc tínhMD5SHA-256
Độ dài digest128 bit (32 ký tự hex)256 bit (64 ký tự hex)
Thiết kế1991 (Ron Rivest)2001 (NSA, FIPS 180-2)
Gia đìnhdòng MD4gia đình SHA-2
Kháng va chạmBị phá từ 2004 (Wang et al.); va chạm thực tế trong vài giâyKhông biết va chạm thực tế; ~2128 phép tính để tìm một
Kháng preimage thứ haiYếu đi nhưng không có tấn công thực tế cho đầu vào đã tính trướcMạnh; ~2256 phép tính
Tốc độ (x86-64 hiện đại)~500 MB/s mỗi lõi~300 MB/s mỗi lõi (SHA-NI: ~1,5 GB/s)
Tăng tốc phần cứngKhông có lệnh chuyên biệtIntel SHA-NI, mở rộng crypto ARMv8
An toàn cho sử dụng mã hóaKhông - không dùng cho chữ ký, cert pinning, băm mật khẩuCó (ngoại trừ băm mật khẩu - dùng Argon2id/bcrypt cho mật khẩu)

Tại sao MD5 bị phá và điều đó thực sự có nghĩa gì

Tại sao MD5 bị phá và điều đó thực sự có nghĩa gì: kẻ tấn công có thể tạo hai tệp khác nhau cùng MD5, nên chỉ MD5 không chứng minh bạn tải xuống còn nguyên vẹn.

Kháng preimage thứ hai của MD5 yếu hơn SHA-256 nhưng không có tấn công thực tế biết để khôi phục đầu vào từ mà đã tồn tại. Đó là lý do tại sao MD5 vẫn an toàn: xác nhận rằng một digest đã tính trước khớp với một tệp bạn đã tải, khi không có kẻ thứ nào có cơ hội tạo va chạm khôi phục tệp cụ thể đó.


Khi nào MD5 vẫn ổn

Khi nào MD5 vẫn ổn trong hướng dẫn MD5 vs SHA-256: checksum nhanh không đối đầu, manifest cũ, hoặc bắt lỗi ngẫu nhiên khi không ai tấn công bạn.

Cache loại bỏ trùng lặp. Một proxy cache lập chỉ mục đối tượng bằng MD5 của nội dung để phát hiện lặp lại. Va chạm trong bối cảnh này vô hại - hai đối tượng khác với cùng MD5 nghĩa là một lần trượt cache, không hệ quả đối đầu.

Đầu ra cho hàng có sẵn dữ liệu. "Bản ghi này có thể đổi từ lần công bố cuối không?" - băm MD5 hàng, so sánh với digest đã lưu. Nhanh hơn SHA-256; mô hình đối kháng vắng mặt.

Địa chỉ nội dung Git. Git dùng SHA-1 (sớm SHA-256), không phải MD5 - nhưng lý do thiết kế áp dụng: cho một kho lưu được địa chỉ nội dung mà bạn tin người ghi, một băm 128-bit đủ nếu va chạm không là vector tấn công.


Khi nào SHA-256 là lựa chọn duy nhất

Khi nào SHA-256 là lựa chọn duy nhất: hash bạn phát hành, chuỗi chứng chỉ, đối tượng Git, và mọi trường hợp bên thứ ba có thể giả mạo MD5 thông qua collision.

Cert pinning và đầu ra khóa công khai. Đầu ra SHA-256 của khóa công khai của chứng chỉ là tiêu chuẩn cho pinning.

Blockchain và lưu trữ có thể địa chỉ nội dung mà đối kháng thẩm giá. Bitcoin dùng SHA-256 hai lần (SHA-256d) cho tiêu đề khối và định danh giao dịch. Bất kỳ kho lưu nào mà người dùng đóng góp nội dung và va chạm có thể bị lợi dụng cần SHA-256.

HMAC cho xác thực tin nhắn. HMAC-SHA-256 là đường cơ sở cho ký yêu cầu API (AWS Signature v4, GitHub webhooks, Stripe). HMAC-MD5 vẫn dùng trong một số giao thức cũ nhưng ngày càng bị khuyến cáo bởi máy quét tuân thủ.


Cái gì dùng cho mật khẩu (spoiler: không cái nào)

Cái gì dùng cho mật khẩu (spoiler: không cái nào) là một hash mật khẩu chậm như Argon2 hoặc bcrypt - không MD5 hay SHA-256 trần của chuỗi mật khẩu nào là cách lưu chấp nhận được.


Thực tế hiệu suất trong 2026

Thực tế hiệu suất trong 2026 cho MD5 vs SHA-256: cả hai xử lý tệp lớn trong trình duyệt trong vài giây - chọn SHA-256 vì tin cậy, không phải vì MD5 nhanh hơn đang kẹt ở upload thường.

JavaScript trong trình duyệt với WebCrypto (crypto.subtle.digest('SHA-256', data)) đạt ~200 MB/s trên laptop hiện đại. Công cụ chuyển đổi MD5 của chúng tôi chạy MD5 với tốc độ tương tự qua triển khai wasm.


MD5 hoặc SHA-256: quy tắc ranh giới tin cậy

Lựa chọn giữa MD5 và SHA-256 phụ thuộc vào một câu hỏi duy nhất - liệu một kẻ thứ có thể ảnh hưởng đầu vào bạn đang băm. Nếu một người upload từ xa, một kẻ tấn công mạng, hoặc bất kỳ bên nào ngoài ranh giới tin cậy của bạn có thể định hình các byte đến hàm băm, chọn SHA-256 (hoặc SHA-3, hoặc BLAKE3) để một tấn công va chạm không thể giả mạo một digest khớp. Nếu đầu vào đến từ pipeline của bạn và bạn đang đầu ra chúng cho cache, loại bỏ trùng lặp, hoặc phát hiện thay đổi, MD5 ổn và chạy nhanh hơn một chút trên CPU không có SHA-NI. Quyết định là nhị phân và sống tại ranh giới tin cậy; một khi bạn đã gọi tên bên nào của ranh giới đó đầu vào nằm, thuật toán để dùng được quyết định.


Công cụ liên quan


← Quay lại Developer Tools