SHA-256 là lựa chọn tốt nhất cho hầu hết trường hợp: cân bằng giữa tốc độ và bảo mật.
MD5 và SHA-1 không an toàn cho bảo mật. Chỉ dùng cho checksum, không dùng cho mật khẩu.
Mẹo: Hash của chuỗi rỗng ("") cũng cho ra kết quả cố định — dùng để kiểm tra thuật toán.
Hàm hash là gì?
Hàm hash (hàm băm) là một thuật toán toán học chuyển đổi dữ liệu đầu vào có kích thước bất kỳ thành một chuỗi đầu ra có kích thước cố định, gọi là digest hay hash value. Quá trình này chỉ hoạt động một chiều: từ dữ liệu gốc có thể tính được hash, nhưng từ hash không thể suy ngược ra dữ liệu gốc. Đây là tính chất quan trọng nhất của hàm hash, được gọi là tính không đảo ngược (pre-image resistance).
Mỗi thay đổi dù nhỏ nhất trong dữ liệu đầu vào cũng tạo ra một hash hoàn toàn khác biệt. Ví dụ, hash SHA-256 của “Hello” và “hello” (chỉ khác viết hoa) là hai chuỗi hoàn toàn không liên quan. Tính chất này được gọi là hiệu ứng tuyết lở (avalanche effect) và là nền tảng cho nhiều ứng dụng bảo mật.
Hàm hash được ứng dụng rộng rãi trong xác minh tính toàn vẹn dữ liệu, chữ ký số, lưu trữ mật khẩu (kết hợp với salt), blockchain, và cơ sở dữ liệu phân tán. Mọi khi bạn tải phần mềm và thấy mã checksum trên trang download, đó chính là hash của file.
Cách hoạt động của hash mật mã
Hash mật mã (cryptographic hash) tuân theo ba tiêu chí bảo mật:
- Kháng tiền ảnh (Pre-image resistance): Cho hash H, không thể tìm dữ liệu M sao cho hash(M) = H trong thời gian hợp lý.
- Kháng tiền ảnh thứ hai (Second pre-image resistance): Cho M1, không thể tìm M2 khác sao cho hash(M1) = hash(M2).
- Kháng va chạm (Collision resistance): Không thể tìm cặp (M1, M2) bất kỳ sao cho hash(M1) = hash(M2).
Về mặt kỹ thuật, quá trình hash chia dữ liệu thành các block có kích thước cố định, sau đó xử lý tuần tự qua nhiều vòng (round) bao gồm các phép toán bitwise, phép cộng modular, và hoán vị. SHA-256 chẳng hạn sử dụng 64 vòng xử lý với 8 biến trạng thái 32-bit, tạo ra output 256-bit (32 byte).
Công cụ Hash Generator của ZestLab sử dụng Web Crypto API cho SHA-1, SHA-256 và SHA-512 — đây là API mật mã gốc của trình duyệt, được tối ưu hóa hiệu suất và chạy hoàn toàn phía client. MD5 được triển khai bằng JavaScript thuần vì Web Crypto API không hỗ trợ thuật toán đã bị deprecated này.
MD5 vs SHA-256 — So sánh toàn diện
MD5 (Message Digest Algorithm 5) được phát triển năm 1991 bởi Ronald Rivest, tạo ra hash 128-bit. Trong nhiều năm, MD5 là tiêu chuẩn de facto cho checksum và xác minh tệp. Tuy nhiên, từ năm 2004, các nhà nghiên cứu đã chứng minh có thể tạo collision (hai đầu vào khác nhau cho cùng một hash) một cách có hệ thống. Năm 2008, các nhà nghiên cứu thậm chí tạo được chứng chỉ SSL giả bằng MD5 collision.
SHA-256 thuộc họ SHA-2, được NSA thiết kế và NIST công bố năm 2001. Với output 256-bit, SHA-256 có không gian hash lớn hơn MD5 gấp 2^128 lần. Tính đến 2026, chưa có cuộc tấn công collision thực tế nào thành công với SHA-256. Đây là thuật toán được dùng trong Bitcoin, TLS/SSL hiện đại, và hầu hết hệ thống bảo mật.
Bảng so sánh nhanh
- Kích thước output: MD5 = 128 bit (32 hex), SHA-256 = 256 bit (64 hex)
- Tốc độ: MD5 nhanh hơn ~30%, nhưng đây là nhược điểm cho bảo mật (dễ brute-force hơn)
- An toàn collision: MD5 = BỊ PHÁ, SHA-256 = An toàn
- Dùng cho mật khẩu: Cả hai đều KHÔNG phù hợp — dùng bcrypt/Argon2
- Dùng cho checksum: MD5 vẫn chấp nhận được nếu không có đối thủ cố ý, SHA-256 an toàn hơn
Các trường hợp sử dụng phổ biến
- Xác minh tính toàn vẹn file: Sau khi download phần mềm, so sánh SHA-256 hash của file với hash trên trang chủ để đảm bảo file không bị chỉnh sửa.
- Lưu trữ mật khẩu an toàn: Server không lưu mật khẩu gốc mà lưu hash (kèm salt). Khi đăng nhập, hash mật khẩu nhập vào được so sánh với hash đã lưu. Lưu ý: dùng bcrypt/Argon2, không dùng SHA trực tiếp.
- Chữ ký số: Hash của tài liệu được ký bằng khóa riêng. Người nhận xác minh bằng khóa công khai — đảm bảo tài liệu không bị thay đổi.
- Blockchain: Mỗi block chứa hash của block trước, tạo thành chuỗi không thể thay đổi. Bitcoin dùng SHA-256 kép (double SHA-256).
- Loại trùng dữ liệu (Deduplication): Hệ thống lưu trữ dùng hash để phát hiện file trùng lặp mà không cần so sánh toàn bộ nội dung.
- Tạo fingerprint nội dung: Trang web dùng hash để tạo ETag header, giúp trình duyệt biết khi nào cần tải lại tài nguyên.
Thực hành bảo mật hash tốt nhất
- Luôn dùng SHA-256 hoặc mạnh hơn: MD5 và SHA-1 chỉ nên dùng cho tương thích ngược với hệ thống cũ, không cho ứng dụng mới.
- Không dùng SHA trực tiếp cho mật khẩu: SHA quá nhanh, cho phép brute-force hàng tỷ lần/giây. Dùng bcrypt (cost factor 12+), Argon2id, hoặc scrypt.
- Luôn thêm salt khi hash mật khẩu: Salt là chuỗi ngẫu nhiên được gắn vào mật khẩu trước khi hash, ngăn chặn tấn công rainbow table.
- Xác minh hash từ nhiều nguồn: Khi download phần mềm quan trọng, kiểm tra hash từ ít nhất 2 nguồn độc lập (trang chủ + GPG signature).
- Cân nhắc HMAC cho xác thực: Khi cần xác minh tính toàn vẹn VÀ nguồn gốc, dùng HMAC-SHA256 thay vì SHA-256 thuần.
- Theo dõi các tiêu chuẩn mới: SHA-3 (Keccak) đã được NIST chuẩn hóa năm 2015 như phương án dự phòng cho SHA-2. Hiện tại SHA-2 vẫn an toàn, nhưng SHA-3 sẵn sàng nếu cần.
Câu hỏi thường gặp
Công cụ khác bạn có thể thích
Thêm công cụ trong Developer Tools
Giới thiệu về Developer Tools
Công cụ developer tự động hóa các phần lặp đi lặp lại của công việc phần mềm: format JSON, encode/decode Base64, decode JWT để xác minh claim của token, tạo UUID, format XML, diff cấu hình. Đây không phải tác vụ hào nhoáng, nhưng là các điểm nghẽn ngốn 10-15 phút nhiều lần mỗi ngày — cộng lại hàng giờ mỗi tuần. Chạy chúng trên tab trình duyệt sạch sẽ hơn vật lộn với phụ thuộc CLI hay extension IDE có thể gửi dữ liệu riêng tư của bạn cho bên thứ ba.
Vì sao nó quan trọng
Công cụ developer client-side nhanh về cơ bản quan trọng vì chúng được dùng với dữ liệu nhạy cảm. JWT token chứa danh tính người dùng. Payload Base64 có thể encode API key. JSON dump bao gồm bản ghi khách hàng. Nếu một 'công cụ developer' gửi input của bạn lên server để xử lý, bạn vừa rò rỉ production secret. Công cụ dev của ZestLab chạy 100% client-side không có network call nào sau khi load page — những gì bạn paste vẫn ở trong trình duyệt.
Riêng tư và an toàn
Tất cả công cụ developer ở đây chạy trong trình duyệt bằng JavaScript thuần. Không có 'decode server' hay 'format API' — JWT, JSON, payload encode của bạn được parse bởi code chạy trên laptop của bạn. Tự xác minh bằng DevTools trình duyệt → Network tab: bạn sẽ thấy không có request nào khi dùng bất kỳ công cụ nào. Đó là tiêu chuẩn chúng tôi giữ vì công cụ dev xử lý secret.
Thực hành tốt
- Không bao giờ paste JWT hay API token production vào BẤT KỲ công cụ online nào mà không xác minh chạy client-side (check tab Network)
- Dùng chế độ ẩn danh trình duyệt để decode một lần các payload nhạy cảm
- Bookmark công cụ bạn dùng hàng ngày — URL công cụ ZestLab ổn định, không cần tài khoản
- Khi format JSON có secret để team review, redact credential trước khi share output