FIPS กำหนด Secure Hash Algorithms: SHA1, SHA224, SHA256, SHA384, SHA512 RSA กำหนด MD5 โมดูล hashlib ใช้งานอัลกอริทึมเหล่านี้
อัลกอริทึมที่รองรับ
- md5 (ไม่แนะนำสำหรับความปลอดภัย)
- sha1 (ไม่แนะนำสำหรับความปลอดภัย)
- sha224
- sha256
- sha384
- sha512
- sha3_224, sha3_256, sha3_384, sha3_512 (SHA-3)
- shake_128, shake_256 (Extendable-output functions)
- blake2b, blake2s (BLAKE2 - RFC 7693)
การใช้งานแบบ Generic
>>> import hashlib
>>> hash = hashlib.new('md5', b'hello')
>>> hash.hexdigest()
'5d41402abc4b2a76b9719d911017c592'
Named Constructors (แนะนำ เร็วกว่า)
>>> import hashlib
>>> 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.hexdigest()
'ab7ad843286eb38bf60c0ef2817ad7f9338335b2a19c4db1531ff7f91a762d46'
>>> msg.block_size
64
>>> msg = hashlib.md5()
>>> msg.update(b'Simple is better than complex')
>>> msg.hexdigest()
'fd34bb8fafd17f1a21d7bb6e38c8dc68'
Methods ของ Hash Object
| Method | คำอธิบาย |
update(data) | อัปเดท hash object ด้วย bytes-like object (สามารถเรียกหลายครั้ง) |
digest() | คืนค่า digest เป็น bytes |
hexdigest() | คืนค่า digest เป็น hex string (ยาว 2 เท่า) |
copy() | คัดลอก hash object (สำหรับ common prefix) |
Attributes
| Attribute | คำอธิบาย |
algorithms_guaranteed | Set ของ algorithms ที่รับประกันว่ามีทุก Platform |
algorithms_available | Set ของ algorithms ที่มีใน Interpreter นี้ |
digest_size | ขนาด digest ใน bytes |
block_size | Block size ภายในอัลกอริทึม (bytes) |
name | ชื่อ canonical ของ hash (lowercase) |
SHAKE (Variable Length)
>>> shake = hashlib.shake_128()
>>> shake.update(b'data')
>>> shake.hexdigest(20) # 20 bytes = 40 hex chars
'...'
BLAKE2
- BLAKE2b: 64-bit platforms, digest 1-64 bytes
- BLAKE2s: 8-32-bit platforms, digest 1-32 bytes
- เร็วกว่า MD5/SHA-1 ปลอดภัยเท่า SHA-3
คำแนะนำความปลอดภัย
- หลีกเลี่ยง MD5 และ SHA1 สำหรับ Security/Cryptographic purposes
- ใช้ SHA-256 ขึ้นไป หรือ SHA-3/BLAKE2
- สำหรับ Password Hashing ใช้
bcrypt, scrypt, PBKDF2 (ผ่าน hashlib.pbkdf2_hmac)