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
| MD5 | SHA-256 | |
| Độ dài | 128-bit (32 hex) | 256-bit (64 hex) |
| Tốc độ | Nhanh hơn | Chậm hơn |
| Bảo mật | Đã phá vỡ (collision) | An toàn hiện tại |
| Dùng cho | Checksum file, cache key | Crypto, 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).