2013-07-03 50 views
1

我有一堆哈希密码pbkdf2_sha256$10000$0POUvc6y8M4z$QyldL9qyQO...。是否有可能在SQL查询中验证它们?不要问为什么。通过MySQL生成密码的pbkdf2_sha256哈希

+2

为什么不问为什么?为什么? – ircmaxell

+0

我可以通过python获得这个哈希值,但是我必须在MySQL中获取它。 –

+0

为什么呢?在MySQL中做高效率可能是不可能的。 – duskwuff

回答

0

通常数据库系统本身不支持这种散列函数。无论如何编写查询都很困难,因为密码哈希是不可搜索的。要验证密码及其散列值,必须执行以下步骤:

  1. 按用户名搜索该行(不能由散列值完成)。
  2. 从找到的行中返回密码哈希。
  3. 从存储的密码哈希中提取使用的盐和成本因子。
  4. 使用相同的盐和成本因子从输入的密码中构建新的哈希值。
  5. 比较存储的散列值和新计算的散列值。

这意味着,您首先必须知道存储的散列值,然后才能使用它验证输入的密码。这种散列函数在开发语言中肯定比在数据库中更好,尤其是当您稍后必须切换算法或成本因素并需要向后兼容性时。