安全密码哈希

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 标准库的一部分。