hash - 密码散列 SELECT (PHP)

标签 hash mysql salt

是否可以仅使用发布的密码从 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/

相关文章:

ruby-on-rails - 如何从(YAML)哈希中递归删除所有具有空值的键?

java - 该键是否具有映射到内存位置的哈希表?

mysql - Perl Web 应用程序问题 : DBI connect failed: Can't create TCP/IP socket (10106)

php - 如何在 mysql 查询 php 中回显当前日期

Java:仅通过计算其哈希码从集合中检索对象

c# - 是否有符合 .NET FIPS 的键控 SHA256 哈希算法?

python - Django 使用 Mysql 返回无日期时间字段

windows - Windows 上的并行配置错误

hash - 如果有人获得了加盐 key ,加盐密码是否毫无意义?关闭服务器加盐?

c# - 我如何在我的 ASP.Net 应用程序上使用 salting+hashing?