问题标签 [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 - 在 PHP 5.5 中生成密码哈希并设置成本选项
我知道 PHP 5.5 处于 alpha 阶段,但我正在制作的这个类只是提前制作,以通过使用 function_exists() 来利用它的散列功能。
我查看了password_hash
文档。第三个参数是 $options 目前支持两个选项,'salt' 和 'cost'。
它声明如下:
cost,表示应该使用的算法成本。这些值的示例可以在 crypt() 页面上找到。
当我转到 crypt() 页面时,它提供的文档是:
使用盐的河豚散列如下:“$2a$”、“$2x$”或“$2y$”、两位数的成本参数、“$”和字母表中的 22 位数字“./0-9A-Za” -z”。在 salt 中使用超出此范围的字符将导致 crypt() 返回零长度字符串。两位数的成本参数是底层基于 Blowfish 的散列算法的迭代计数的以 2 为底的对数,必须在 04-31 范围内,超出此范围的值将导致 crypt() 失败。5.3.7 之前的 PHP 版本仅支持“$2a$”作为 salt 前缀:PHP 5.3.7 引入了新前缀以修复 Blowfish 实现中的安全漏洞。请参阅 » 本文档以获取有关安全修复的完整详细信息,但总而言之,开发人员仅针对 PHP 5.3。
我似乎无法理解这一点。它说 PHP 5.3.7 和更高版本应该使用 $2y$,但是我用什么成本值来获得那个,它是最好的选择吗?他们提供的示例使用了 7 的值,但根据上述它可以上升到 31,使用say 4 与 say 31 有什么区别?
php - 密码哈希 API 查询
所以我正在使用新的 PHP 5.5 Password Hashing API,但我不确定我是否正确理解了这一点。
我试过自动重新散列每次登录,有时我失败了,即使散列结果是一样的,我觉得我做错了什么。
这可能是我可能弄错了查询函数,因为当我检查 phpMyAdmin 时哈希甚至没有改变。
php - 使用 PHP 5.5 的 password_hash 和 password_verify 函数
假设我想为用户存储密码,这是否是使用 PHP 5.5 的password_hash()
功能(或 PHP 5.3.7+ 的此版本:https ://github.com/ircmaxell/password_compat )的正确方法?
然后我会这样做:
插入数据库。
然后验证:
php - 为什么我的登录不起作用?我的哈希方法是否有错误/是否正确?
登记:
确认:
忽略我使用的即将弃用的方法,我会尽快更改。
为什么这不起作用?它检测到用户名的密码错误。
我正在使用这个库来允许以前版本中的 PHP 5.5 函数:https ://github.com/ircmaxell/password_compat
(是的,我可以使用该功能,我使用的是 PHP 5.3.15)
php - 使用带有 phpto 散列密码的 Bcrypt 不起作用
我正在使用带有 php 的 Bcrypt 来获取一个安全的散列密码,以便在注册时提交到数据库密码得到散列但在登录时系统显示 2 密码不匹配任何人都可以帮助我??????? ?
我只需要从 password.php 文件
- 密码哈希函数
- 密码验证功能
密码.php
注册.php
登录.php
php - password_hash 中的默认算法是什么
阅读有关 PHP 5.5 的新password_hash函数的文档,我想知道默认算法是什么:
关于它的文档没有澄清这一点:http ://www.php.net/manual/en/password.constants.php
php - hash_pbkdf2 vs password_hash PHP函数
由于 PHP 5.5.0 现已推出,
哪一个更好用(安全性、便携性、面向未来)?
它说 password_hash() PASSWORD_DEFAULT可能会在每个完整版本(+1.0 或 +0.1)中更改,那么我们如何使用以前的 DEFAULT 方法散列密码和新的默认值?这是否意味着在用户更改密码之前,数据库中已散列密码的 PHP 5.5 脚本将无法在 PHP 5.6 上运行?COST变化怎么样(我想知道服务器是否可以更新到 php v5.6,或者网站管理员可能会更改托管服务提供商(然后为更弱/更强的服务器更改 COST),对当前用户没有任何问题)
我们应该等待一些更新还是它们已经可以在 5.5.0 中安全使用
我们是否还应该使用 PHPass 等框架,或者这些新的 PHP 5.5 功能就足够了和/或更多的未来证明?
php - 无法验证散列密码
我正在使用 SHA-512 加密密码。我认为我所做的一切都是正确的(甚至复制在其他地方成功的代码),但是每次我尝试输入密码时,它都无法匹配我存储在数据库中的密码。
我已经验证了以下明显的潜在问题并将其排除为原因:
1)我的数据库中存储了一个加密密码
2) 我能够检索此密码并将其存储在变量 $db_password 中
3) 变量 $username 和 $currentPlaintext 确实具有我的 ajax 函数调用传递的正确值。
那么,为什么这不起作用?我错过了一些明显的东西吗?谢谢!
编辑:感谢到目前为止的评论。澄清一下,据我了解 crypt() 函数,crypt的第二个参数实际上是存储在db中的整个字符串。该字符串不仅包括哈希密码,还包括算法、盐值和哈希轮数。crypt() 函数应该从该字符串中提取盐值,然后将其应用于散列第一个参数。然后将结果与之前的散列密码进行比较。这就是为什么这很令人困惑。我不必给它一个盐值——盐就在数据库中。我误解了这个功能发生了什么吗?
我最初使用以下代码对密码进行哈希处理: