Nhiều giao thức bảo mật (TLS, IPsec, SSH,...) dùng mã xác thực bản tin HMAC để bảo đảm tính toàn vẹn: bên gửi tính T=HMAC-SHA256(K,M) rồi gửi kèm M và T; bên nhận tính lại HMAC và so sánh với T nhận được.
Cho khóa bí mật K (dạng chuỗi hex, có thể là chuỗi rỗng), bản tin M (chuỗi ký tự, có thể chứa khoảng trắng, có thể rỗng) và mã xác thực nhận được T (chuỗi hex viết thường), hãy xác định bản tin có toàn vẹn hay không.
Ví dụ: Với K = 2b7e151628aed2a6abf7158809cf4f3c, M = Test Message, T = 6b5b18223c0c43ac0b01cfeb9f25d1ebc8fd217d5f21adb43ad146ae991132be thì HMAC-SHA256(K,M) tính được đúng bằng T, nên bản tin hợp lệ.
Ba dòng: dòng 1 là K (chuỗi hex, số ký tự chẵn, có thể rỗng); dòng 2 là bản tin M (đọc nguyên vẹn cả dòng, có thể chứa khoảng trắng, có thể rỗng); dòng 3 là T (chuỗi hex viết thường, đúng 64 ký tự).
In ra VALID nếu HMAC-SHA256(K, M) (dạng hex viết thường) trùng với T; ngược lại in INVALID.
Ví dụ:
Đầu vào:
hello
4352b26e33fe0d769a8922a6ba29004109f01688e26acc9e6cb347e5a5afc4da
Đầu ra:
VALID
Đầu vào:
2b7e151628aed2a6abf7158809cf4f3c
Test Message
6b5b18223c0c43ac0b01cfeb9f25d1ebc8fd217d5f21adb43ad146ae991132be
Đầu ra:
VALID
Đang tải editor...