Thuật toán Hashing (MD5, SHA-1, SHA-256) là gì? Giải thích dễ hiểu kèm demo băm trực tiếp

Hashing là một kỹ thuật cực kỳ quan trọng trong bảo mật và lập trình hiện đại. Từ việc lưu mật khẩu, ký số, kiểm tra tính toàn vẹn file, đến tạo identifier cho dữ liệu – tất cả đều có thể dùng hàm băm (hash function).

Thuật toán Hashing (MD5, SHA-1, SHA-256) là gì? Giải thích dễ hiểu kèm demo băm trực tiếp

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

Thuật toán: SHA-256
Độ dài hash: 256bit

Kết quả hash (hex)

Chưa có kết quả.

Ghi chú

MD5 và SHA-1 hiện không còn an toàn cho mục đích bảo mật (lưu mật khẩu, chữ ký số…). Demo này chỉ mang tính học thuật.

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 Encodingconcept AES kèm demo trực quan.

Bình luận


  • Không có bình luận.

Init Toolbox

Nhấn Ctrl + \ trên máy tính, hoặc vuốt sang trái ở bất kỳ đâu trên mobile.

Đăng nhập





Đang tải...