Để quy trình băm an toàn và message digest, ta nên dùng module hashlib. Module này triển khai giao diện chung cho các thuật toán băm an toàn khác nhau như SHA1, SHA224, SHA256, SHA512, v.v. Cũng như thuật toán MD5 của RSA. Các thuật toán cũ được gọi là Message Digest, phương pháp mới gọi là Secure Hash.
Để dùng module này, cần nhập module hashlib trong mã Python.
import hashlib
Trong module này, có một số thuật toán định nghĩa sẵn như md5, sha1, sha224, sha256, sha512. Ta có thể thêm thuật toán bổ sung từ thư viện OpenSSL.
Một số phương thức, hằng số của module hashlib:
Hằng số hashlib.algorithms_guaranteed
Trả về tên các thuật toán băm đảm bảo được hỗ trợ bởi module này trên tất cả nền tảng khác nhau.
Hằng số hashlib.algorithms_available
Trả về tên các thuật toán băm có sẵn trong trình thông dịch Python đang chạy.
Hằng số hashlib.digest_size
Trả về kích thước của hash kết quả tính bằng byte.
Hằng số hashlib.block_size
Trả về kích thước block nội bộ của thuật toán băm tính bằng byte.
Phương thức hashlib.new(name[, data])
Là constructor. Nhận tên thuật toán mong muốn làm đối số đầu tiên. Có thể dùng các hash định nghĩa sẵn hoặc thuật toán khác từ OpenSSL.
Phương thức hashlib.update(arg)
Cập nhật đối tượng hash với đối số cho trước. Gọi lặp lại tương đương gọi đơn lẻ với đối số nối tiếp.
Phương thức hashlib.digest()
Trả về dữ liệu đã băm (digested) qua update. Kích thước byte object = digest_size. Chứa byte 0-255.
Phương thức hashlib.hexdigest()
Giống digest nhưng kết quả chỉ chứa giá trị hexadecimal. Dùng để gửi dữ liệu qua internet dễ dàng.
Mã ví dụ
import hashlib
my_hash1 = hashlib.md5() # Chọn md5 và update với bytes
update_bytes = b'Python123'
my_hash1.update(update_bytes)
print("Kết quả sau digest: " + str(my_hash1.hexdigest()))
print("Digest Size: " + str(my_hash1.digest_size))
my_hash2 = hashlib.sha256() # Chọn SHA256 và update cùng bytes
my_hash2.update(update_bytes)
print("Kết quả sau digest: " + str(my_hash2.hexdigest()))
print("Digest Size: " + str(my_hash2.digest_size))
Kết quả
Kết quả sau digest: ae35eacb1cb6f6d38c29a04ecb2d7471 Digest Size: 16 Kết quả sau digest: bba32ba33d6a7f3e02a96e2d7ee6860765780aee42b878007369e373ff419b1e Digest Size: 32