Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

Secure Hashes และ Message Digest ใน Python (โมดูล hashlib)

โมดูล hashlib ให้ Interface มาตรฐานสำหรับ Secure Hash Algorithms: SHA-1, SHA-2 (224, 256, 384, 512), SHA-3, BLAKE2, และ Legacy MD5

import hashlib


Algorithms ที่รองรับ

AlgorithmConstructorDigest SizeBlock Sizeหมายเหตุ
MD5hashlib.md5()16 bytes (128 bits)64❌ ไม่ปลอดภัย สำหรับ Crypto
SHA-1hashlib.sha1()20 bytes (160 bits)64❌ Deprecated
SHA-224hashlib.sha224()28 bytes (224 bits)64✅ OK
SHA-256hashlib.sha256()32 bytes (256 bits)64✅ Recommended
SHA-384hashlib.sha384()48 bytes (384 bits)128✅ OK
SHA-512hashlib.sha512()64 bytes (512 bits)128✅ OK
SHA3-256hashlib.sha3_256()32 bytes136✅ Modern
BLAKE2bhashlib.blake2b()64 bytes (Max)128✅ Fast, Secure
BLAKE2shashlib.blake2s()32 bytes (Max)64✅ Fast, Secure

ดูอัลกอริทึมที่มี: hashlib.algorithms_guaranteed, hashlib.algorithms_available


เมธอดหลักของ Hash Object

  • update(data) - เพิ่มข้อมูล (Bytes-like) เรียกซ้ำได้
  • digest() - คืน Binary Digest
  • hexdigest() - คืน Hex String
  • copy() - คัดลอกสถานะปัจจุบัน

โค้ดตัวอย่าง

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