- Hashing giải bài toán gì?
- Hash function là gì? (và cần tính chất gì?)
- MD5, SHA-1, SHA-256 khác nhau thế nào?
- Demo: Băm chuỗi với MD5, SHA-1, SHA-256 (JavaScript + UIkit)
- Demo: Hashing với MD5, SHA-1, SHA-256
- Phân tích nhanh đoạn code demo
- 1. Giao diện chọn thuật toán và nhập chuỗi
- 2. Băm với SHA-1 / SHA-256 bằng Web Crypto API
- 3. Băm với MD5 bằng JavaScript thuần
- Khi nào nên (và không nên) dùng hashing?
- Kết luận
Trong bài này, chúng ta sẽ tìm hiểu khái niệm hashing, điểm khác nhau giữa MD5, SHA-1, SHA-256 và một demo trực tiếp bằng JavaScript + UIkit để bạn tự tay nhập chuỗi và xem kết quả băm.
Hashing giải bài toán gì?
Bài toán cơ bản:
- Cho một dữ liệu đầu vào (text, password, file…).
- Cần “biến” nó thành một chuỗi có độ dài cố định, trông ngẫu nhiên, không thể suy ngược lại.
Hàm băm được dùng rất nhiều trong thực tế:
- Lưu mật khẩu dưới dạng hash thay vì plain text.
- Kiểm tra tính toàn vẹn file (so sánh hash trước và sau khi tải).
- Tạo chữ ký số, token, ID từ dữ liệu gốc.
- Cấu trúc dữ liệu Hash Table / Map để truy cập nhanh.
Hash function là gì? (và cần tính chất gì?)
Một hàm băm “đúng nghĩa” trong bảo mật thường có các tính chất:
- Đầu vào tùy ý, đầu ra cố định: Dù input dài thế nào, output cũng có độ dài cố định (ví dụ 128 bit, 160 bit, 256 bit…).
- Deterministic: Cùng một input → luôn cho cùng một output.
- Không thể đảo ngược (one-way): Từ hash không suy ra được input ban đầu một cách khả thi.
- Nhạy cảm với thay đổi nhỏ (avalanche effect): Thay đổi một ký tự nhỏ trong input → hash thay đổi hoàn toàn.
- Khó sinh va chạm: Khó (gần như bất khả thi) tìm ra hai input khác nhau nhưng cho cùng một hash (collision).
Trong thực tế, không có thuật toán nào hoàn hảo, nhưng MD5, SHA-1, SHA-256 là những cái tên phổ biến nhất trong lịch sử.
MD5, SHA-1, SHA-256 khác nhau thế nào?
- MD5:
- Độ dài hash: 128 bit.
- Từng rất phổ biến để kiểm tra file, lưu mật khẩu.
- Hiện nay đã bị phá (có collision) → không nên dùng cho bảo mật.
- SHA-1:
- Độ dài hash: 160 bit.
- Thuộc họ SHA-1 cũ, từng dùng trong SSL, Git…
- Cũng đã bị tấn công collision → không khuyến khích cho bảo mật mới.
- SHA-256:
- Độ dài hash: 256 bit.
- Thuộc họ SHA-2, hiện vẫn được xem là an toàn (tính đến thời điểm hiện tại).
- Được dùng trong SSL/TLS, JWT, blockchain (Bitcoin)…
Tóm lại:
- MD5, SHA-1 → phù hợp mục đích demo, học thuật, check file cũ, không nên dùng cho bảo mật mới.
- SHA-256 → lựa chọn phổ biến và an toàn hơn.
Demo: Băm chuỗi với MD5, SHA-1, SHA-256 (JavaScript + UIkit)
Demo dưới đây cho phép bạn:
- Nhập một chuỗi bất kỳ.
- Chọn thuật toán: MD5, SHA-1 hoặc SHA-256.
- Xem kết quả hash dạng hex + độ dài bit.
Demo: Hashing với MD5, SHA-1, SHA-256
Kết quả hash (hex)
Ghi chú
Phân tích nhanh đoạn code demo
1. Giao diện chọn thuật toán và nhập chuỗi
Ta dùng một <textarea> cho chuỗi input, một <select> để chọn thuật toán và một vùng hiển thị kết quả.
2. Băm với SHA-1 / SHA-256 bằng Web Crypto API
Trình duyệt hiện đại hỗ trợ window.crypto.subtle.digest, cho phép băm dữ liệu với SHA-1, SHA-256…
3. Băm với MD5 bằng JavaScript thuần
MD5 không có sẵn trong Web Crypto, nên demo dùng một triển khai MD5 bằng JavaScript (mục đích học thuật, không khuyến nghị dùng cho bảo mật thật).
Khi nào nên (và không nên) dùng hashing?
- Nên dùng:
- Lưu mật khẩu dưới dạng hash (kết hợp salt, pepper, bcrypt/argon2…).
- Kiểm tra tính toàn vẹn file (so sánh hash).
- Tạo ID/tóm tắt cho dữ liệu lớn.
- Không nên hiểu nhầm:
- Hashing ≠ encryption (mã hoá có thể giải ngược, hashing thì không).
- MD5/SHA-1 hiện không nên dùng cho bảo mật mới.
Kết luận
Hashing là nền tảng của rất nhiều cơ chế bảo mật. Hiểu được cách MD5, SHA-1, SHA-256 hoạt động (và tình trạng an toàn hiện tại) sẽ giúp bạn thiết kế hệ thống an toàn hơn, tránh những sai lầm phổ biến như lưu mật khẩu bằng MD5 hoặc hash “chay” không có salt.
Trong các bài tiếp theo của series “Thuật toán mã hoá & bảo mật cơ bản”, ta sẽ đi tiếp vào Caesar Cipher, Vigenère Cipher, Base64 Encoding và concept AES kèm demo trực quan.
Bình luận