Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用成本对密码进行反哈希_Php_Password Hash - Fatal编程技术网

Php 使用成本对密码进行反哈希

Php 使用成本对密码进行反哈希,php,password-hash,Php,Password Hash,例如,如果我对密码进行20次哈希运算,则会产生以下代价: $Pass1=password_hash($Pass, PASSWORD_DEFAULT, ['cost' => 20]) 然后我将其存储在数据库中,如何让用户登录我的网站,如果根据我所知的password\u verify() 我是否需要进行password\u验证($password,$storedPassword)20次? 还是有更简单的方法?我看到一个密码\u需要\u更新,我已经尝试过使用它,但没有成功。过了一段时间,我找

例如,如果我对密码进行20次哈希运算,则会产生以下代价:

$Pass1=password_hash($Pass, PASSWORD_DEFAULT, ['cost' => 20])
然后我将其存储在数据库中,如何让用户登录我的网站,如果根据我所知的
password\u verify()

我是否需要进行
password\u验证($password,$storedPassword)
20次?
还是有更简单的方法?我看到一个密码\u需要\u更新,我已经尝试过使用它,但没有成功。

过了一段时间,我找到了解决方案

$Pass1=password_hash($Pass, PASSWORD_DEFAULT, ['cost' => 20]);
password_verify($PasswordInputByUser, $Pass1);
太简单了

<?php

$Pass = 'greatPassword1';
$Pass1 = password_hash( $Pass, PASSWORD_DEFAULT, ['cost' => 12] );
echo $Pass1;

如果您使用的是成本为20美元的密码,您很可能会在哈希密码的开头看到$2y$20$。我的PHP没有设置为允许超过30秒的执行时间,因此我改为较低的成本值。

多次散列密码不会增加安全性。检查文本是否为先前保存的密码的正常方法是遵循与原始密码相同的转换过程(即,在本例中,将传入文本散列20次,并与先前保存的散列进行比较)。如果将密码散列为成本因子20,则成本因子实际上存储在散列中,因此,password_verify可以查看哈希算法和成本因素,并使用它们来验证提供的密码。只需在OP中使用它,它将处理其余部分。
$verified = password_verify('greatPassword1', $Pass1);
// True

$verified = password_verify('wrongPassword1', $Pass1);
// False