问题标签 [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.
php - password_hash 究竟是如何工作的?
我试图完全理解password_hash,以便能够为审计员解释它。
根据我对答案的搜索,我了解到该password_hash()
函数是crypt()
. 在阅读预定义常量的 PHP 手册时,我看到它PASSWORD_BCRYPT
用作默认整数值(基本上它使用CRYPT_BLOWFISH
算法来散列密码)。
令我困惑的是$options
,如果省略该变量,则会生成一个随机盐,并且成本将设置为10
. 如果我提供更高的成本(例如:)12
,它是否仍会生成随机盐,因为我没有提供盐值?我在这里感到困惑的原因是因为我没有省略,$options
而是提供了不同的成本。
我的其他问题:
- 为什么增加成本价值会增加安全性?
- 由于盐是随机的,既然
password_hash()
是单向散列函数,如何验证密码?password_verify()
CRYPT_SHA512
比CRYPT_BLOWFISH
散列强吗?
php - CRYPT_BLOWFISH 使用多少位?
在将用户密码存储到数据库之前,我使用PHP 中的password_hash函数对用户密码进行哈希处理。
我使用默认算法(即 CRYPT_BLOWFISH)来散列密码。对于成本值,我使用 12 而不是 10。但我不确定的一件事是加密密码的位长度。是 64、128、256 位吗?
另外,增加成本值是否会增加位长?
谢谢
php - php 5.5 中的密码哈希函数
我有以下函数对密码进行哈希处理并将其存储在数据库中。我正在尝试在 php 5.5 中使用 password_hash 函数,但它给了我奇怪的结果。
然后,我将我正在测试的相同静态密码的结果输出为“testpassword”,并且它不断给我不同的哈希值。这是为什么?如果它继续这样做,我将永远无法验证密码,因为它永远不会为完全相同的字符串产生相同的哈希值。
我需要事先配置或设置一些东西才能正常工作吗?
php - password_verify() 与数据库中的密码不匹配
我正在创建一个用户登录页面。我用于password($pass,PASSWORD_BCRYPT)
将数据插入数据库但尝试验证密码与password_verify($password,$salt)
值不匹配。
我确信$salt
从数据库中检索到的数据是正确的,但它不匹配。你能建议我如何进一步解决它吗?我对此进行了彻底的搜索,但找不到任何答案。
这是我下面的登录代码:
php - 现有用户的密码哈希
我收到一个 PHP 错误并在 hurl.it 上返回空正文。我试图散列我数据库中现有用户的密码。
使用 user_id 作为 POST 并在新创建的列中将其更新到我的数据库
php - PHP password_hash 函数盐的长度是 21 还是 22?
代码:
结果:
代码:
结果:
代码:
问题:
如您所见,通过将 A 和 B 附加到 21 个字符串,我们创建了两种不同的 22 个字符的盐,但是,哈希是相同的!那就是第22个字符被忽略了?如果它被忽略,那么为什么它要求 22 个字符的盐?
php - PHP 密码哈希(),密码验证()
我的注册脚本接受用户的密码,然后使用 PHP 的 password_hash 函数对密码进行加密,然后将其放入数据库中。当我使用刚刚创建的用户登录时,我收到检查密码是否相同的错误。就我而言,他们不是。当我在登录脚本中调用 password_verify 函数时,我做错了什么?
登记
登录
这是我执行 var_dump 时得到的结果:
很明显,密码没有匹配在一起。因此,在注册脚本上,密码被散列并发送到数据库。然后,当用户登录时,登录脚本会查看用户输入的登录密码,然后使用 password_verify 将其与数据库中的散列密码进行检查。然而,散列密码不接受未散列的密码作为匹配项。我不明白的是,为什么?
php - password_verify 哈希与密码不匹配
我使用以下代码生成了密码哈希:
然后我使用 255 字符将其存储在数据库中。
然后我尝试做比较器来测试登录,它失败了。它只允许我使用我之前刚刚生成几行的哈希登录,而不是存储在数据库中的哈希。
数据库中的密码哈希:$2y$10$xDnZIjzw8h.9utp3qyRlxezPd8jmK9k6Z5JuoVtooOpkPCBd.n6W6 刚刚生成的密码哈希(有效):$2y$10$tolDQdeTQrTio8IJ0Wi9AuHN5Km28pSB5kUh5qfkdkOsDXP295H1K
我不是散列专家。只是试图遵循最新的建议。有人可以告诉我为什么哈希与数据库中的哈希不同吗?
php - php password_hash 和 password_verify 看了一遍还是不行
更新 所以这是一个令人尴尬的愚蠢承认,但问题是我存储在数据库中的哈希是“密码”的哈希,包括引号,我写的查询没有问题,问题在于主席和键盘。
所以这是一个经常被问到的问题,我已经查看了 stackoverflow 和谷歌试图找出答案,但一直没有成功。
我有一个“代理”表,其中为每个代理分配了登录名和密码。密码字段是一个长度为 255 的 varchar。
这是我的php代码:
我很茫然。它似乎只在我提供本地创建的 password_hash 副本时才起作用,如果我随后在 MySQL 数据库中使用该本地创建的副本,它就会失败。
有任何想法吗?
php - PHP 5.5 Password Hashing API 比较 2 个 password_hash() 变量的正确方法
我正在设置一个注册表单并使用密码哈希 API,据我所知,这是目前保护密码的最佳方法。
我的表格是
因此,一旦按下提交按钮,我就会向我的表单添加一些验证,如下所示
我遇到的问题是我的密码检查
我正在检查这两个变量是否匹配,但我在猜测,因为我已经向它们添加了 password_hash,它正在检查哈希值而不是用户输入的实际值?我将如何纠正这个问题,以便它检查实际数据而不是哈希值(永远不会匹配)?
感谢任何帮助!
干杯