没有得到PHPASS

时间:2013-12-11 13:31:08

标签: php phpass

我尝试为我的程序提供最好的密码安全性,经过一些研究,所有道路似乎都以PHPASS结束作为我的最佳选择。我正在做一些实验性试验,以了解我在做什么。 lol不太好lol尽管我可以看到PHPASS在密码中添加一个随机盐然后哈希它然后它可以存储在数据库中,用户现在已注册!。这对我来说很好。这部分我不喜欢不明白,当用户登录时,我从数据库中检索哈希并将其与用户在登录中输入的密码进行比较,但这次新哈希是不同的,因为它已经被创建了来自不同的盐?并且那里与存储在DB中的那个不匹配。在某些地方我是愚蠢的,并且遗漏了一些显而易见的其他人都得到的东西。请帮助我,因为我似乎迟钝了!

3 个答案:

答案 0 :(得分:2)

是的,这是一个很好用的库。如果你有PHP 5.5+,则没有必要,因为内置了类似的功能。

使用$hasher->CheckPassword($pass, $hash)检查密码,而不是重新密码。这样它就可以确保它使用相同的盐(盐存储在哈希的开头,就像哈希算法一样)。

答案 1 :(得分:1)

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

<强>算法:

对于bcrypt哈希,这应该是'$ 2y $',尽管'$ 2x $'和'$ 2a $'也是可能的。见PHP's manual entry on crypt()。 (如果可以的话,PHPASS使用crypt())

<强>费用:

04-31范围内的2个字符宽的零填充值。 1&lt;&lt; {{}}将在内部使用,这就是为什么31是上限(32位可用)。

<强>盐

字母表中的22个字符“./0-9A-Za-z”。

将哈希用作salt时,不会使用其余字符。

Here is some code and its output that might clear up how it works when used correctly:

<cost>

答案 2 :(得分:0)

感谢您的帮助窥视我似乎现在正在工作,但如果您愿意为我检查它,如果没关系,其他人可能会发现它有用,请记住它只是测试文件所以更多将是如果核心没问题,则添加

这是用于散列密码并存储密码的REG代码。     

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";
}

您怎么看?