是否可以仅使用发布的密码从 MySql DB 选择经过哈希处理和加盐处理的密码?如果是这样,怎么办?
如果我这样散列密码:
$password = "blabla";
$hash = password_hash($password, PASSWORD_DEFAULT);
$hash
例如,$2y$10$8zzd3lj6oIPlBPnCxsU7nOmtsEFlKw/BdqTXyMgbuojjVpiEe4rVm
并将存储在数据库中。
在登录过程中,如果密码匹配且只有“blabla”作为数据,如何仅检查散列密码列和表的列?
最佳答案
无法使用数据库查询来搜索经过正确加盐和散列处理的密码。您必须通过用户名/电子邮件/...搜索哈希值,然后您可以使用找到的哈希值验证输入的密码。
1)第一次查询存储的哈希
SELECT passwordhash FROM users WHERE email = ?
2) 使用找到的哈希值验证输入的密码
$isPasswordCorrect = password_verify($password, $existingHashFromDb);
正是盐使得搜索变得不可能,必须先从存储的哈希值中提取盐,然后才能验证密码。这样的查询必须读取每个散列,提取其盐并进行散列。由于哈希函数非常慢(故意),因此查询需要很长的时间才能执行。
关于hash - 密码散列 SELECT (PHP),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31818421/