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

Secure Hashes และ Message Digests ด้วย Python (hashlib)

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_guaranteedSet ของ algorithms ที่รับประกันว่ามีทุก Platform
algorithms_availableSet ของ algorithms ที่มีใน Interpreter นี้
digest_sizeขนาด digest ใน bytes
block_sizeBlock 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)