Php 没有拿到通行证

Php 没有拿到通行证,php,phpass,Php,Phpass,我试图为我的程序提供最好的密码安全性,经过一些研究,所有的道路似乎都以PHPASS作为我的最佳选择。我正在做一些实验来了解我在做什么。就我所见,它进展不顺利。PHPASS在密码中添加了一个随机的salt,然后对它进行散列,这样它就可以存储在数据库中,用户现在已经注册了!。这对我来说很好。这是我不理解的部分,当用户登录时,我从数据库中检索哈希值,并将其与用户在登录时输入的密码生成的哈希值进行比较,但这次新哈希值不同,因为它是由不同的盐生成的?这里的for与数据库中存储的不匹配。在某个地方,我很愚蠢

我试图为我的程序提供最好的密码安全性,经过一些研究,所有的道路似乎都以PHPASS作为我的最佳选择。我正在做一些实验来了解我在做什么。就我所见,它进展不顺利。PHPASS在密码中添加了一个随机的salt,然后对它进行散列,这样它就可以存储在数据库中,用户现在已经注册了!。这对我来说很好。这是我不理解的部分,当用户登录时,我从数据库中检索哈希值,并将其与用户在登录时输入的密码生成的哈希值进行比较,但这次新哈希值不同,因为它是由不同的盐生成的?这里的for与数据库中存储的不匹配。在某个地方,我很愚蠢,遗漏了一些其他人都能得到的东西。请帮帮我,因为我看起来像个弱智!是的,这是一个很好的库。不过,如果您有PHP5.5+,就没有必要了,因为内置了类似的功能


使用
$hasher->CheckPassword($pass,$hash)
检查密码,而不是重新设置密码。通过这种方式,它确保使用相同的salt(salt存储在散列的开始处,散列算法也是如此)。

PHPASS返回一个散列,其中包含用于计算散列的算法、散列的成本、使用的salt,我假设的是算法的结果,因此取决于使用的密码

算法:

对于bcrypt哈希,这应该是“$2y$”,尽管“$2x$”和“$2a$”也是可能的。看见(我相信PHPASS使用crypt()(如果可用)

成本:


04-31范围内2个字符宽的零填充值。1谢谢你的帮助,peeps,我现在似乎已经可以使用了,但是如果你能帮我检查一下,如果可以的话,其他人可能会觉得它很有用,请记住,这只是测试文件,所以如果内核可以的话,会添加更多

这是将密码散列并存储的注册码。
if(isset($_POST['submit'])) {

    $username = $_POST['username'];
    $password = $_POST['password'];
    $hash = password_hash($password, PASSWORD_BCRYPT);

    if (empty($_POST) === false){
    mysql_query("INSERT INTO `accounts` VALUES ('', '$username', '$hash') ");
        echo 'Done';
    }else{
        echo 'Not Done';
    }
}   ?>
这是登录名

<?php
require('../password/lib/password.php');
require_once("connect.php");

if(isset($_POST['submit'])) {

    $username = $_POST['username'];
    $safe_username = mysql_real_escape_string($username);
    $password = $_POST['password'];

    $query = "SELECT * FROM accounts WHERE username = '$safe_username'";
    $result = mysql_query($query);
    $row = mysql_fetch_assoc($result);
    $hash = $row['password'];

    if (password_verify($password, $hash)) {
        echo 'Logged in';
    } else {
        echo 'Not logged in';
    }

} else {
    echo " Not submitted";
}

你能分享一些代码吗?。这可能会给您一个更好的主意。该功能是使用函数内置的。如果您使用的是PHP>=5.3.7,那么从注册期间SQL注入的可能性和使用不推荐使用的mysql扩展来看,可以使用.Appart。你似乎知道如何检查密码是否正确。谢谢,这只是一个小测试仪。当我把它插入完成的程序时,上面的所有内容都会被添加。当我在解决问题时,我喜欢限制可能影响结果的因素的数量,你能澄清一下“不推荐的mysql扩展”是什么意思吗?看看每个mysql_*函数都有这个警告。如果您切换到MySQLi扩展,请使用OO接口,它使发现mysql_*函数更容易:p
<?php
require('../password/lib/password.php');
require_once("connect.php");

if(isset($_POST['submit'])) {

    $username = $_POST['username'];
    $safe_username = mysql_real_escape_string($username);
    $password = $_POST['password'];

    $query = "SELECT * FROM accounts WHERE username = '$safe_username'";
    $result = mysql_query($query);
    $row = mysql_fetch_assoc($result);
    $hash = $row['password'];

    if (password_verify($password, $hash)) {
        echo 'Logged in';
    } else {
        echo 'Not logged in';
    }

} else {
    echo " Not submitted";
}