HOTP sinh mã OTP từ một khoá bí mật (secret, dạng ASCII) và một bộ đếm (counter). Thuật toán:
HS = HMAC-SHA1(key=secret_bytes, msg=counter_bytes) (20 byte).offset = HS[19] & 0x0f. Lấy 4 byte HS[offset..offset+3], ghép thành số 31 bit (xoá bit cao nhất): bin_code = ((HS[offset] & 0x7f) << 24) | (HS[offset+1] << 16) | (HS[offset+2] << 8) | HS[offset+3].otp = bin_code % 10^digits, in ra với đệm 0 phía trước cho đủ digits chữ số.Khái niệm: HOTP là nền tảng của ứng dụng xác thực 2 lớp (2FA).
Ví dụ: secret = 12345678901234567890, counter = 0, digits = 6 → 755224 (vector kiểm thử RFC 4226).
Dòng 1: secret (chuỗi ASCII, không chứa khoảng trắng). Dòng 2: số nguyên counter. Dòng 3: số nguyên digits (số chữ số của OTP).
1 ≤ độ dài secret ≤ 100; 0 ≤ counter ≤ 2^53; 4 ≤ digits ≤ 8.
In mã HOTP gồm đúng digits chữ số (có đệm 0 nếu cần).
Ví dụ:
Đầu vào:
12345678901234567890
0
6
Đầu ra:
755224
Giải thích:
Đang tải editor...