问题标签 [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() 已经提供了盐,我是否必须生成额外的盐?
在使用 PHP 的本机 password_hash() 函数时,必须(或应该)生成我自己的盐,即使(据我了解)它已经可以创建一个盐,如本示例中所示(由http://www.php 提供。净):
目前我一直在使用 sha512 进行散列并生成 38,500 个字符的盐。(我不确定字符数是否真的很重要,所以我还是尝试了......它似乎奏效了,因为允许我成功注册和登录用户,但我不知道整个安全漏洞)像这样:
很奇怪,但是在密码学方面我有很多东西要学。(这里是其中一种盐的链接https://shrib.com/F7lB9Ycf)现在如果我要添加额外的盐(如果你说是,再次加盐),那么我将如何在使用 password_verify 时添加盐()?
提前感谢任何可以提供帮助的人!
php - 每个字符串的 PHP password_hash 函数值不同
我正在尝试使用password_hash() PHP 函数来散列用户密码。但是,它的函数是工作散列,而不是恒定的。
第四次测试结果
java - 使用 Java 在 PHP 中使用 password_hash 验证密码散列
我有一个基于 PHP 的 Web 应用程序,它将 HTTP 请求发送到 Java Web 服务,Java Web 服务反过来执行 Oracle 数据库中请求的操作。我想在 HTTP 请求中发送密码之前使用 password_hash 对我的密码进行哈希处理。如果我在创建新用户时这样做,那没有问题。但是,当我需要使用此密码登录时,我无法在 PHP 中验证它,因为我没有(也不能)直接访问数据库以获取存储在那里的哈希值。所以验证必须在 Java Web 服务中。那有可能吗?如果没有,还有什么选择?使用的盐是随机的,所以我不能散列用于登录的密码并发送它,因为我没有用于存储在数据库中的散列的盐。
php - Password_verify 与数据库不匹配
我查看了与此相关的其他问题/答案,并尝试以多种方式修改我的代码以适应他们的答案,但没有成功。我有一个可以正常工作的注册表单,并使用 password_hash 函数成功地将用户添加到数据库中。密码字段为 VARCHAR(255),输入时显示为散列。
问题在于登录表单。我一整天都在尝试各种方法,但没有成功。下面是我当前的 login.php 脚本。
$error 变量工作正常,但仍然看不到密码验证出错的地方,不断收到“电子邮件或密码无效”错误而不是“匹配”。
对于我在代码中遗漏的内容,我真的很感激一些反馈!谢谢 :)
php - 使用来自数据库的散列密码时,password_verify 不起作用
解决了
我的注册表有一个奇怪的问题。JS 做了一些奇怪的事情,即使 password_verify 在登录时工作,哈希在某些情况下是不同的......现在我修复了我的代码,它现在可以工作了!谢谢大家!
解决了
我正在认真地试图弄清楚为什么我的 password_verify 代码已经 4 天没有工作了,我真的很困惑和生气......
首先,我不得不说会话已经开始,其他一切都在正常工作。
但是当我尝试创建一个 password_verify 脚本时,它仍然回显错误...
数据库中的字段被命名password
并设置为varchar 255
.
来自数据库的密码如下所示:
$2y$10$GEw0Ie6r/Udz2hgJVkCy.ut99NY5NE.h8LEvNM1gBizA1tY58iNa6
不错,应该是这个样子的。。。
当我在我的页面上回显数据库密码时,它显示相同,所以很好。但是当我这样做时password_verify
,它不起作用。它表明这password_verify
是错误的......我不知道为什么,因为我 100% 确定我在表单中输入的密码是正确的并且与 db 密码匹配。但是,它不起作用,并且不会像应有的那样回显“DONE”。
echo strlen
显示 60
echo $dbpassword
显示散列的数据库密码。
echo $passwordsubmitted
显示从表单正常输入的密码。
但是,当我使用这段代码时,它正在工作并且 echo 是“DONE”,所以这意味着 password_verify 是真的......
我真的不知道为什么会这样。有什么建议么?
更新
注册输入是<input type='password' name='password'>
注册时提交的密码使用以下代码进行哈希处理:
php - 尝试散列密码时将空值输入数据库
我过去在项目中使用过少量 PHP,但是我正在尝试一些新的尝试来哈希密码。
在一个单独的页面上有一个 web 表单,它在提交时重定向到 checkRegistration.php 表单,然后连接到数据库,获取用户值,验证它们并将它们输入到各自的列中。
到目前为止,所有传递的值都正确输入,除了那些被password_hash函数传递的值被输入为“0”或空。我认为它是 0 它没有被正确处理并且想知道我做错了什么。
?>
php - 将密码与存储的哈希进行比较
据我目前的理解(至少我认为),password_hash() 函数根据使用的算法、成本和盐生成哈希。而password_verify 使用eg 提供的信息password_hash($pass, PASSWORD_BCRYPT, array('cost'=>10))
来检查返回的值是真还是假,因为它包含验证所需的所有信息。
我以前用过
$SQL_Query = "SELECT * FROM DB_Table WHERE userName = '".$username."'" AND password = $ID;
这将起作用,因为它们以纯文本形式存储并且可以返回 true,而从逻辑上讲,这一次它不会起作用。
我遇到过类似的问题,他们在解释中使用静态密码,例如
我难以理解的概念是,如果密码输入存储在数据库中,而不是在那个时间点被页面知道,如何检查密码输入与哈希值?我最近得到了有关存储值的帮助,这对我来说是一个愚蠢的错误,但我想这并没有像我现在希望的那样点击我。
authentication - Xenforo 密码验证问题
以下是我的密码存储哈希:
$P$Di4MXJKUkkJRfzrpffssNdasSN3XAg0
我正在尝试像这样验证我的 Xenforo 密码:
例如:
我的密码是:123456
我的密码存储哈希是:$P$Di4MXJKUkkJRfzrpffssNdasSN3XAg0
所以我正在编写以下代码进行身份验证:
任何人都可以建议我如何进行身份验证?
提前致谢。
php - 如何使用 PHP 的 password_hash 来散列和验证密码
最近,我一直在尝试在互联网上偶然发现的登录脚本上实现自己的安全性。在努力学习如何制作自己的脚本为每个用户生成盐之后,我偶然发现了password_hash
.
据我了解(基于此页面上的阅读),当您使用password_hash
. 这是真的?
我的另一个问题是,有 2 种盐不是很聪明吗?一个直接在文件中,一个在数据库中?这样,如果有人在数据库中破坏了您的盐,您仍然可以直接在文件中使用它吗?我在这里读到存储盐从来都不是一个聪明的主意,但它总是让我困惑人们的意思。
php - What will happen if they changed PASSWORD_DEFAULT in PHP Password library?
Consider this line of code by using PHP:
What will happen if they changed the default password hashing algorithm? I mean I will be having hashed password inside the database. Then, from my own understanding, it will be impossible to check the password because the hashing algorithm will be totally changed.