Python语言安全密码散列
示例
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标准库的一部分。