可以将密码作为 pbkdf2 哈希存储在数据库中吗?

Is it ok to store password as pbkdf2 hash in database?

我需要在数据库中存储密码。我在 windows 上,该平台给出的唯一算法是 pbkdf2(据我所知)。那么可以将我的密码存储为 pbkdf2 的哈希值吗?或者他们是否可以通过 Windows API 获得更好的算法(密码学 API 或类似的 api 在 Windows 上可用?)。我还了解到 PBKDF2+SHA512 与 BCrypt

没有太大区别

PBKDF2 确实是密码哈希,因此专为此类操作而设计。这并不意味着它没有任何缺点。像往常一样,它有盐和工作因子(比 PBKDF2 使用的 迭代计数 更通用的术语)。

但是它不提供任何内存硬度,因此更容易创建专门的硬件来攻击它。此外,智能实现可以通过执行预计算来加速用于指定哈希函数的 HMAC 算法。最后,如果您询问的位数多于散列函数的输出,那将是非常低效的——但如果您只是将它用作密码散列而不是(多)密钥推导,那并不是真正的主题。

所以 PBKDF2 是旧的,但它仍然比没有盐 and/or 工作因素的愚蠢数量的 hash(pasword)hash(salt | password) 方案好一百万倍。从字面上看,因为您至少会使用 1000000 作为迭代计数。


请注意,使用密码哈希仍然允许弱密码;您应该尽可能添加额外的措施,例如密码猜测限制、密码强度指标等等。它主要用于保护您的用户密码,以防登录数据库被盗。