Hash/Mật mã

HMAC Generator

Tính HMAC (Hash-based Message Authentication Code) của văn bản hoặc tệp bằng khóa bí mật — cùng lúc tám thuật toán: MD5, SHA-1, SHA-256, SHA-384, SHA-512, SHA3-256, SHA3-512, RIPEMD-160.

HMAC (Hash-based Message Authentication Code) is a hash computed together with a secret key, proving a message hasn't changed and was sent by someone who knows that key. Unlike a plain hash, an HMAC can't be forged without knowing the secret.

How to use it

Common uses

Things to keep in mind

HMAC protects against tampering and confirms the sender's authenticity, but it doesn't encrypt the message itself — the content stays readable.

A mismatched HMAC is most often caused by different data encoding (e.g. JSON field order) or a stray whitespace or line break, not by a bug in the algorithm itself.

Bài viết về công cụ này: HMAC: hash có khóa khác gì so với hash thông thường

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

Sự khác biệt giữa HMAC và hash thông thường là gì?

Hash thông thường chỉ chứng minh dữ liệu không bị thay đổi; HMAC còn sử dụng một khóa bí mật, nên chứng minh cả tính toàn vẹn lẫn việc người gửi biết bí mật chung — không có khóa, không ai tạo được HMAC hợp lệ dù biết thuật toán.

Nên chọn thuật toán băm nào cho HMAC?

HMAC-SHA256 là lựa chọn mặc định hiện đại vững chắc. Các lựa chọn cũ như HMAC-MD5 hay HMAC-SHA1 vẫn chưa bị phá vỡ riêng với vai trò HMAC, nhưng SHA-256 trở lên được khuyến nghị cho hệ thống mới.

Khóa bí mật của tôi có được gửi đi đâu không?

Không. HMAC được tính toán hoàn toàn trong trình duyệt của bạn qua Web Crypto API — khóa và thông điệp không bao giờ rời khỏi thiết bị của bạn.

Vì sao không thể so sánh HMAC bằng toán tử so sánh thông thường?

So sánh chuỗi thông thường dừng lại ở khác biệt đầu tiên, và thời gian thực hiện tiết lộ cho kẻ tấn công biết họ đã đoán đúng bao nhiêu ký tự đầu tiên (timing attack). Cần dùng các hàm so sánh trong thời gian không đổi, ví dụ hash_equals trong PHP.

Có thể dùng cùng một khóa cho nhiều mục đích khác nhau không?

Không nên. Nếu cùng một khóa bí mật được dùng để ký webhook và cho mục đích khác, việc một hệ thống bị xâm phạm sẽ tự động làm hệ thống kia bị xâm phạm theo — nên tạo khóa riêng cho từng mục đích cụ thể.

Bài viết: Hash/Mật mã

Hash Generator: MD5, SHA-1 và SHA-256 khác nhau ở điểm nào

Vì sao MD5 vẫn được dùng để kiểm tra tính toàn vẹn của tệp, nhưng không dùng cho mật khẩu.

Checksum Verifier: cách kiểm tra một tệp có bị hỏng hay không

Vì sao checksum trùng khớp xác nhận tính toàn vẹn của một tệp, nhưng không xác nhận ai đã tạo ra nó.

Bcrypt: vì sao mật khẩu được băm chậm chứ không nhanh

Vì sao SHA-256 nhanh là lựa chọn tồi cho mật khẩu, còn bcrypt chậm mới là lựa chọn đúng.

UUID: cách tạo ra định danh gần như không bao giờ trùng lặp

Vì sao UUID v4 có thể được tạo độc lập trên hàng triệu máy mà không có nguy cơ trùng lặp.

Trình tạo mật khẩu: điều gì thực sự làm cho mật khẩu mạnh

Vì sao mật khẩu dài gồm các từ trong từ điển mạnh hơn mật khẩu ngắn có ký hiệu và số.

AES: mã hóa đối xứng hoạt động như thế nào

Vì sao cùng một khóa vừa mã hóa vừa giải mã dữ liệu trong AES, và điều này khác gì với mã hóa bất đối xứng.

Argon2: vì sao thuật toán này giành chiến thắng cuộc thi băm mật khẩu

Argon2 phòng thủ trước các cuộc tấn công bằng GPU tốt hơn các thuật toán băm mật khẩu cũ như thế nào.

Scrypt: vì sao thuật toán cần nhiều bộ nhớ đến vậy

Vì sao scrypt cố ý đòi hỏi nhiều bộ nhớ để gây khó khăn cho việc dò trên thiết bị ASIC.

TOTP: mã dùng một lần trong ứng dụng xác thực hoạt động như thế nào

Vì sao mã trong Google Authenticator hoạt động không cần internet và chỉ đồng bộ với máy chủ qua thời gian.

PBKDF2: tiêu chuẩn kéo giãn khóa lâu đời nhất

Vì sao số lần lặp khuyến nghị của PBKDF2 tăng lên mỗi năm.

X.509: bên trong một chứng chỉ SSL có gì

Trình duyệt kiểm tra chính xác điều gì trong chứng chỉ của một trang web trước khi hiển thị ổ khóa xanh.

PGP: mã hóa bằng khóa công khai và khóa riêng hoạt động như thế nào

Vì sao có thể chia sẻ tự do khóa công khai PGP, nhưng không bao giờ chia sẻ khóa riêng.