问题标签 [php-password-hash]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
3820 浏览

php - password_hash 究竟是如何工作的?

我试图完全理解password_hash,以便能够为审计员解释它。

根据我对答案的搜索,我了解到该password_hash()函数是crypt(). 在阅读预定义常量的 PHP 手册时,我看到它PASSWORD_BCRYPT用作默认整数值(基本上它使用CRYPT_BLOWFISH算法来散列密码)。

令我困惑的是$options,如果省略该变量,则会生成一个随机盐,并且成本将设置为10. 如果我提供更高的成本(例如:)12,它是否仍会生成随机盐,因为我没有提供盐值?我在这里感到困惑的原因是因为我没有省略,$options而是提供了不同的成本。

我的其他问题:

  • 为什么增加成本价值会增加安全性?
  • 由于盐是随机的,既然password_hash()是单向散列函数,如何验证密码?password_verify()
  • CRYPT_SHA512CRYPT_BLOWFISH散列强吗?
0 投票
1 回答
298 浏览

php - CRYPT_BLOWFISH 使用多少位?

在将用户密码存储到数据库之前,我使用PHP 中的password_hash函数对用户密码进行哈希处理。

我使用默认算法(即 CRYPT_BLOWFISH)来散列密码。对于成本值,我使用 12 而不是 10。但我不确定的一件事是加密密码的位长度。是 64、128、256 位吗?

另外,增加成本值是否会增加位长?

谢谢

0 投票
2 回答
881 浏览

php - php 5.5 中的密码哈希函数

我有以下函数对密码进行哈希处理并将其存储在数据库中。我正在尝试在 php 5.5 中使用 password_hash 函数,但它给了我奇怪的结果。

然后,我将我正在测试的相同静态密码的结果输出为“testpassword”,并且它不断给我不同的哈希值。这是为什么?如果它继续这样做,我将永远无法验证密码,因为它永远不会为完全相同的字符串产生相同的哈希值。

我需要事先配置或设置一些东西才能正常工作吗?

0 投票
1 回答
1651 浏览

php - password_verify() 与数据库中的密码不匹配

我正在创建一个用户登录页面。我用于password($pass,PASSWORD_BCRYPT)将数据插入数据库但尝试验证密码与password_verify($password,$salt)值不匹配。

我确信$salt从数据库中检索到的数据是正确的,但它不匹配。你能建议我如何进一步解决它吗?我对此进行了彻底的搜索,但找不到任何答案。

这是我下面的登录代码:

0 投票
2 回答
76 浏览

php - 现有用户的密码哈希

我收到一个 PHP 错误并在 hurl.it 上返回空正文。我试图散列我数据库中现有用户的密码。

使用 user_id 作为 POST 并在新创建的列中将其更新到我的数据库

0 投票
2 回答
2922 浏览

php - PHP password_hash 函数盐的长度是 21 还是 22?

代码:

结果:

代码:

结果:

代码:

问题:

如您所见,通过将 A 和 B 附加到 21 个字符串,我们创建了两种不同的 22 个字符的盐,但是,哈希是相同的!那就是第22个字符被忽略了?如果它被忽略,那么为什么它要求 22 个字符的盐?

0 投票
2 回答
24418 浏览

php - PHP 密码哈希(),密码验证()

我的注册脚本接受用户的密码,然后使用 PHP 的 password_hash 函数对密码进行加密,然后将其放入数据库中。当我使用刚刚创建的用户登录时,我收到检查密码是否相同的错误。就我而言,他们不是。当我在登录脚本中调用 password_verify 函数时,我做错了什么?

登记

登录

这是我执行 var_dump 时得到的结果:

很明显,密码没有匹配在一起。因此,在注册脚本上,密码被散列并发送到数据库。然后,当用户登录时,登录脚本会查看用户输入的登录密码,然后使用 password_verify 将其与数据库中的散列密码进行检查。然而,散列密码不接受未散列的密码作为匹配项。我不明白的是,为什么?

0 投票
1 回答
2454 浏览

php - password_verify 哈希与密码不匹配

我使用以下代码生成了密码哈希:

然后我使用 255 字符将其存储在数据库中。

然后我尝试做比较器来测试登录,它失败了。它只允许我使用我之前刚刚生成几行的哈希登录,而不是存储在数据库中的哈希。

数据库中的密码哈希:$2y$10$xDnZIjzw8h.9utp3qyRlxezPd8jmK9k6Z5JuoVtooOpkPCBd.n6W6 刚刚生成的密码哈希(有效):$2y$10$tolDQdeTQrTio8IJ0Wi9AuHN5Km28pSB5kUh5qfkdkOsDXP295H1K

我不是散列专家。只是试图遵循最新的建议。有人可以告诉我为什么哈希与数据库中的哈希不同吗?

0 投票
1 回答
1704 浏览

php - php password_hash 和 password_verify 看了一遍还是不行

更新 所以这是一个令人尴尬的愚蠢承认,但问题是我存储在数据库中的哈希是“密码”的哈希,包括引号,我写的查询没有问题,问题在于主席和键盘。

所以这是一个经常被问到的问题,我已经查看了 stackoverflow 和谷歌试图找出答案,但一直没有成功。

我有一个“代理”表,其中为每个代理分配了登录名和密码。密码字段是一个长度为 255 的 varchar。

这是我的php代码:

我很茫然。它似乎只在我提供本地创建的 password_hash 副本时才起作用,如果我随后在 MySQL 数据库中使用该本地创建的副本,它就会失败。

有任何想法吗?

0 投票
1 回答
127 浏览

php - PHP 5.5 Password Hashing API 比较 2 个 password_hash() 变量的正确方法

我正在设置一个注册表单并使用密码哈希 API,据我所知,这是目前保护密码的最佳方法。

我的表格是

因此,一旦按下提交按钮,我就会向我的表单添加一些验证,如下所示

我遇到的问题是我的密码检查

我正在检查这两个变量是否匹配,但我在猜测,因为我已经向它们添加了 password_hash,它正在检查哈希值而不是用户输入的实际值?我将如何纠正这个问题,以便它检查实际数据而不是哈希值(永远不会匹配)?

感谢任何帮助!

干杯