首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >得不到PHPASS

得不到PHPASS
EN

Stack Overflow用户
提问于 2013-12-11 13:31:07
回答 3查看 156关注 0票数 1

我正试图为我的程序提供最好的密码安全,经过一些研究后,所有的道路似乎以PHPASS作为我最好的选择。我在做一些实验来了解我在做什么。我看到PHPASS向密码中添加了一个随机盐,然后对其进行散列,以便将其存储在DB中,用户现在就可以注册了!.This对我来说很好。我不明白,当用户登录时,我从DB检索哈希,并将其与用户在登录时输入的密码进行比较,但这次新哈希是不同的,因为它是从不同的盐中生成的?而在那里,由于与存储在DB.Somewhere中的不匹配,我是愚蠢的,缺少了其他人都能得到的显而易见的东西。请帮帮我,因为我似乎是弱智!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-12-11 13:33:57

是的,这是一个很好的图书馆。但是,如果您有PHP,则没有必要,因为类似的功能是内置在5.5+中的。

使用$hasher->CheckPassword($pass, $hash)检查密码,而不是重新散列密码。通过这种方式,它确保使用相同的salt ( salt存储在哈希开始时,就像哈希算法一样)。

票数 2
EN

Stack Overflow用户

发布于 2013-12-11 15:24:36

PHPASS返回包含用于计算哈希的算法、哈希的成本、使用的salt以及我假设的算法的结果的哈希,因此取决于所使用的密码。

算法:

对于bcrypt散列,这应该是'$2y$',虽然'$2x$‘和'$2a$’也是可能的。见PHP在crypt()上的手动输入。(如果有可用的话,PHPASS使用crypt() )

成本:

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

盐:

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

当将散列用作盐类时,将不使用其余字符。

以下是一些代码及其输出,这些代码和输出可能会澄清正确使用时的工作方式:

代码语言:javascript
复制
<?php

    echo crypt('meow', '$2y$05$' . str_repeat('.', 20) . '//meow'), PHP_EOL; // salt: ....................//
    echo crypt('meow', '$2y$05$' . str_repeat('.', 20) . '//woof'), PHP_EOL; // salt: ....................//
    echo crypt('meow', '$2y$05$' . str_repeat('.', 20) . '//oink'), PHP_EOL; // salt: ....................//

echo PHP_EOL, '###########################', PHP_EOL, PHP_EOL;

    echo $meow = crypt('meow', '$2y$05$' . str_repeat('.', 20) . '/meow'), PHP_EOL; // salt: ..................../m
    echo $woof = crypt('meow', '$2y$05$' . str_repeat('.', 20) . '/woof'), PHP_EOL; // salt: ..................../w
    echo $oink = crypt('meow', '$2y$05$' . str_repeat('.', 20) . '/oink'), PHP_EOL; // salt: ..................../o

echo PHP_EOL, '###########################', PHP_EOL, PHP_EOL;

    echo crypt('meow', $meow), PHP_EOL; // salt: ..................../m
    echo crypt('meow', $woof), PHP_EOL; // salt: ..................../w
    echo crypt('meow', $oink), PHP_EOL; // salt: ..................../o

echo PHP_EOL, '###########################', PHP_EOL, PHP_EOL;

    var_dump(
        $meow === crypt('meow', $meow),

        $woof === crypt('meow', $woof),

        $oink === crypt('meow', $oink)
    );

$2y$05$..................../.0/SFonSqiMg1jG/nWVk278LFl597ZlC
$2y$05$..................../.0/SFonSqiMg1jG/nWVk278LFl597ZlC
$2y$05$..................../.0/SFonSqiMg1jG/nWVk278LFl597ZlC

###########################

$2y$05$..................../eZ/qB29TfhKdQOwZTIrLyzBTMYOwupD6
$2y$05$..................../u45Ujx7ViT/dCkbXPqwsVuv407AA/99a
$2y$05$..................../eZ/qB29TfhKdQOwZTIrLyzBTMYOwupD6

###########################

$2y$05$..................../eZ/qB29TfhKdQOwZTIrLyzBTMYOwupD6
$2y$05$..................../u45Ujx7ViT/dCkbXPqwsVuv407AA/99a
$2y$05$..................../eZ/qB29TfhKdQOwZTIrLyzBTMYOwupD6

###########################

bool(true)
bool(true)
bool(true)
票数 1
EN

Stack Overflow用户

发布于 2013-12-11 20:03:42

谢谢你的帮助,偷窥,我现在似乎让它工作,但如果你愿意为我检查它,如果它是好的,其他人可能会发现它有帮助,请记住,它只是测试文件,所以会增加更多,如果核心是好的。

这是REG代码,它对密码进行散列并存储它。

代码语言:javascript
复制
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';
    }
}   ?>

这是登录

代码语言:javascript
复制
<?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";
}

你认为如何?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20520502

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档