Tiêu chuẩn Xử lý Thông tin Liên bang (FIPS) định nghĩa các thuật toán băm an toàn SHA1, SHA224, SHA256, SHA384, SHA512. RSA (viết tắt từ họ của Rivest, Shamir, Adleman) định nghĩa thuật toán MD5. Các thuật toán cũ gọi là message digests. Thuật ngữ hiện đại là secure hash (băm an toàn).
Module hashlib dùng để triển khai các thuật toán sau:
- md5
- sha1
- sha224
- sha256
- sha384
- sha512
hashlib.new(name[, data])
Là constructor chung nhận tên chuỗi của thuật toán mong muốn làm tham số đầu tiên. Nó cũng tồn tại để cho phép truy cập các băm trên cũng như bất kỳ thuật toán nào khác mà thư viện OpenSSL của bạn cung cấp. Các constructor có tên nhanh hơn new() và nên ưu tiên dùng.
>>> hash = hashlib.new('md5', b'hello')
>>> hash.hexdigest()
'5d41402abc4b2a76b9719d911017c592'
>>> import hashlib
Sử dụng các constructor có tên riêng:
>>> msg = hashlib.sha256() >>> msg.update(b'Simple is better than complex') >>> msg.digest() b'\xabz\xd8C(n\xb3\x8b\xf6\x0c\x0e\xf2\x81z\xd7\xf93\x835\xb2\xa1\x9cM\xb1S\x1f\xf7\xf9\x1av-F' >>> msg.block_size 64 >>> msg.hexdigest() 'ab7ad843286eb38bf60c0ef2817ad7f9338335b2a19c4db1531ff7f91a762d46' >>> msg = hashlib.md5() >>> msg.update(b'Simple is better than complex') >>> msg.hexdigest() 'fd34bb8fafd17f1a21d7bb6e38c8dc68'
Đối tượng hash có các phương thức sau:
| update() | Cập nhật đối tượng hash với bytes-like object. m.update(a); m.update(b) tương đương m.update(a+b). |
| digest() | Trả về digest của dữ liệu đã truyền cho update() cho đến nay. |
| hexdigest() | Digest trả về dưới dạng chuỗi độ dài gấp đôi, chỉ chứa chữ số thập lục phân. |
| copy() | Trả về bản sao của đối tượng hash. Dùng để tính digest của dữ liệu chia sẻ tiền tố chung. |
Hashlib cung cấp các thuộc tính sau:
| algorithms_guaranteed | Set chứa tên các thuật toán băm đảm bảo được hỗ trợ bởi module này trên mọi nền tảng. |
| algorithms_available | Set chứa tên các thuật toán băm có sẵn trong trình thông dịch Python đang chạy. |
| digest_size | Kích thước hash kết quả tính bằng byte. |
| block_size | Kích thước block nội bộ của thuật toán băm tính bằng byte. |
| name | Tên chuẩn của hash này, luôn chữ thường và luôn phù hợp làm tham số cho new() để tạo hash khác cùng loại. |
Thuật toán shake_128() và shake_256() cung cấp digest độ dài biến đổi với length_in_bits//2 lên đến 128 hoặc 256 bit bảo mật.
BLAKE2 là hàm băm mật mã học định nghĩa trong RFC 7693 với hai biến thể:
- BLAKE2b, tối ưu cho nền tảng 64-bit, tạo digest kích thước 1-64 byte,
- BLAKE2s, tối ưu cho nền tảng 8-32 bit, tạo digest kích thước 1-32 byte.