โมดูล hashlib ให้ Interface มาตรฐานสำหรับ Secure Hash Algorithms: SHA-1, SHA-2 (224, 256, 384, 512), SHA-3, BLAKE2, และ Legacy MD5
import hashlib
Algorithms ที่รองรับ
| Algorithm | Constructor | Digest Size | Block Size | หมายเหตุ |
|---|---|---|---|---|
| MD5 | hashlib.md5() | 16 bytes (128 bits) | 64 | ❌ ไม่ปลอดภัย สำหรับ Crypto |
| SHA-1 | hashlib.sha1() | 20 bytes (160 bits) | 64 | ❌ Deprecated |
| SHA-224 | hashlib.sha224() | 28 bytes (224 bits) | 64 | ✅ OK |
| SHA-256 | hashlib.sha256() | 32 bytes (256 bits) | 64 | ✅ Recommended |
| SHA-384 | hashlib.sha384() | 48 bytes (384 bits) | 128 | ✅ OK |
| SHA-512 | hashlib.sha512() | 64 bytes (512 bits) | 128 | ✅ OK |
| SHA3-256 | hashlib.sha3_256() | 32 bytes | 136 | ✅ Modern |
| BLAKE2b | hashlib.blake2b() | 64 bytes (Max) | 128 | ✅ Fast, Secure |
| BLAKE2s | hashlib.blake2s() | 32 bytes (Max) | 64 | ✅ Fast, Secure |
ดูอัลกอริทึมที่มี: hashlib.algorithms_guaranteed, hashlib.algorithms_available
เมธอดหลักของ Hash Object
update(data)- เพิ่มข้อมูล (Bytes-like) เรียกซ้ำได้digest()- คืน Binary Digesthexdigest()- คืน Hex Stringcopy()- คัดลอกสถานะปัจจุบัน
โค้ดตัวอย่าง
import hashlib
data = b'Python123'
# MD5
h1 = hashlib.md5()
h1.update(data)
print(f"MD5: {h1.hexdigest()} (Size: {h1.digest_size})")
# SHA-256
h2 = hashlib.sha256(data) # ส่ง data ตอนสร้างได้
print(f"SHA-256: {h2.hexdigest()} (Size: {h2.digest_size})")
# SHA-512
h3 = hashlib.sha512()
h3.update(data)
print(f"SHA-512: {h3.hexdigest()} (Size: {h3.digest_size})")
# BLAKE2b
h4 = hashlib.blake2b(data, digest_size=32)
print(f"BLAKE2b-256: {h4.hexdigest()}")
ผลลัพธ์
MD5: ae35eacb1cb6f6d38c29a04ecb2d7471 (Size: 16) SHA-256: bba32ba33d6a7f3e02a96e2d7ee6860765780aee42b878007369e373ff419b1e (Size: 32) SHA-512: 1a2b3c... (Size: 64) BLAKE2b-256: ...
การใช้งาน hashlib.new()
Dynamic Algorithm Selection (รองรับ OpenSSL Algorithms)
# ใช้ชื่อ Algorithm String
h = hashlib.new('sha256', data)
h = hashlib.new('blake2b', data, digest_size=32)
# OpenSSL Algorithms (ถ้ามี)
for name in hashlib.algorithms_available:
print(name)
กรณีใช้งานจริง
- File Integrity: SHA-256 Checksum
- Password Hashing: ❌ อย่าใช้ hashlib โดยตรง -> ใช้
bcrypt,argon2,passlib - Digital Signatures: Hash แล้ว Sign ด้วย Private Key
- Deduplication: Content-addressable Storage
- Merkle Trees/Blockchain: Hash Chaining
ตัวอย่าง: File Checksum
import hashlib
def file_checksum(path, algorithm='sha256', block_size=65536):
h = hashlib.new(algorithm)
with open(path, 'rb') as f:
for chunk in iter(lambda: f.read(block_size), b''):
h.update(chunk)
return h.hexdigest()
print(file_checksum('large_file.iso', 'sha256'))
print(file_checksum('large_file.iso', 'blake2b'))
⚠️ คำเตือน: Password Hashing
hashlib เร็วเกินไปสำหรับ Password -> ใช้ Key Derivation Functions:
hashlib.pbkdf2_hmac('sha256', pwd, salt, 100000)(Built-in)bcrypt(Recommended)argon2(Modern, Memory-hard)scrypt