HMAC (Hash-based Message Authentication Code) là một khung làm việc (framework), dùng để xác thực thông điệp bằng các hàm băm mật mã học (cryptographic hash functions). HMAC có thể dùng cho MD5, SHA-1, v.v.
Ý tưởng cơ bản để tạo băm mật mã: thực hiện băm trên dữ liệu thực tế và khóa bí mật (secret key). Đầu ra cuối cùng được gửi đi kèm mà không có khóa bí mật.
Để dùng module này, cần nhập module hmac trong mã Python.
import hmac
Một số phương thức và thuộc tính của module hmac:
Phương thức hmac.update(message)
Cập nhật đối tượng hmac với thông điệp cho trước. Gọi lặp lại hàm này tương đương với gọi đơn lẻ với các đối số nối tiếp nhau.
Phương thức hmac.digest()
Trả về dữ liệu đã băm (digested) được truyền qua phương thức update. Kích thước đối tượng byte giống với digest_size. Có thể chứa byte trong toàn bộ khoảng 0-255.
Phương thức hashlib.hexdigest()
Giống phương thức digest nhưng kết quả chỉ chứa giá trị hexadecimal. Dùng để gửi dữ liệu qua internet dễ dàng hơn.
Phương thức hashlib.copy()
Tạo một bản sao của đối tượng hmac. Để tính digest của chuỗi hiệu quả hơn, copy() rất hữu ích.
Mã ví dụ
import hashlib
import hmac
update_bytes = b'Python123'
password = b'abcde1234'
my_hmac = hmac.new(update_bytes, password, hashlib.md5) # Tạo hash dùng thuật toán md5
print("Digest đầu tiên: " + str(my_hmac.digest()))
print("Tên chuẩn (Canonical Name): " + my_hmac.name)
my_hmac_cpy = my_hmac.copy() # Tạo bản sao của đối tượng hmac
print("Digest sao chép: " + str(my_hmac_cpy.digest()))
Kết quả
Digest đầu tiên: b"\x1c\xe1\xfb\x9b\xd4\x8bu\xb9\xe6N6\xee\x00O'}" Tên chuẩn: hmac-md5 Digest sao chép: b"\x1c\xe1\xfb\x9b\xd4\x8bu\xb9\xe6N6\xee\x00O'}"