Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Mã hóa MD5 trong Python với hashlib

MD5 (Message Digest Algorithm 5) sinh hash 128-bit (32 ký tự hex). Đã có lỗ hổng bảo mật (collision attack), không dùng cho mục đích bảo mật (lưu password, chữ ký số). Chỉ dùng kiểm tra toàn vẹn file, deduplication.

Sử dụng hashlib.md5()

import hashlib

hash_obj = hashlib.md5(b'Hello, Python!')
print(hash_obj.hexdigest())  # a0af7810eb5fcb84c730f851361de06a

# Hash từ input
mystring = input('Enter string to hash: ')
hash_obj = hashlib.md5(mystring.encode())
print(hash_obj.hexdigest())

Bytes digest vs Hex digest

hash_obj = hashlib.md5(b'Hello, Python!')
print(hash_obj.digest())   # b'\xa0\xafx\x10\xeb_\xcb\x84\xc70\xf8Q6\x1d\xe0j'
print(hash_obj.hexdigest()) # a0af7810eb5fcb84c730f851361de06a

Hash file (kiểm tra trùng lặp/whole vẹn)

def md5_file(filepath):
    hash_md5 = hashlib.md5()
    with open(filepath, "rb") as f:
        for chunk in iter(lambda: f.read(4096), b""):
            hash_md5.update(chunk)
    return hash_md5.hexdigest()

# So sánh 2 file
if md5_file('file1.zip') == md5_file('file2.zip'):
    print("Hai file giống hệt nhau")
else:
    print("Hai file khác nhau")

So sánh MD5 vs SHA-256

MD5SHA-256
Độ dài128-bit (32 hex)256-bit (64 hex)
Tốc độNhanh hơnChậm hơn
Bảo mậtĐã phá vỡ (collision)An toàn hiện tại
Dùng choChecksum file, cache keyCrypto, auth, password (với salt)

Cảnh báo

KHÔNG dùng MD5 để hash password. Dùng bcrypt, argon2, PBKDF2 hoặc scrypt (có salt, cost factor).