安全密码哈希
hashlib
模块公开的 PBKDF2 算法可用于执行安全密码散列。虽然此算法无法阻止暴力攻击以便从存储的哈希中恢复原始密码,但这种攻击非常昂贵。
import hashlib
import os
salt = os.urandom(16)
hash = hashlib.pbkdf2_hmac('sha256', b'password', salt, 100000)
PBKDF2 可以使用任何摘要算法,上面的例子使用通常推荐的 SHA256。随机盐应与散列密码一起存储,为了将输入的密码与存储的散列进行比较,你将再次需要它。每个密码必须使用不同的盐进行哈希处理。关于轮数,建议将其设置为尽可能高的应用程序 。
如果希望结果为十六进制,则可以使用 binascii
模块:
import binascii
hexhash = binascii.hexlify(hash)
注意 :虽然 PBKDF2 并不差,但是 bcrypt 和特别是 scrypt 被认为对强暴攻击更强。目前,它们都不是 Python 标准库的一部分。