影子密码

时间:2010-03-18 13:56:56

标签: php linux authentication

我正在尝试将影子密码与php cli进行比较但不起作用!我使用此功能,所以我可以创建像阴影

的密码
function shadow ($input){
    for ($n = 0; $n < 9; $n++){
        $s .= chr(rand(64,126));
    }
    $seed =  "$1$".$s."$";
    $return = crypt($input,$seed);
    return $return;
}

当我在阴影中替换结果时,它可以使用密码,但它有不同的特性,我可以比较它。

谢谢

3 个答案:

答案 0 :(得分:2)

您的函数使用php seed函数创建随机 salt(变量rand)。因此,您的salt将与影子文件中现有密码使用的盐不同。

如果您想比较哈希(即将crypt调用的输出与shadow中的值进行比较),则需要使用相同的盐。因此,您需要使用影子文件中的现有密码中的salt(= $1$...$部分),而不是随机创建自己的密码。

换句话说,放弃您的功能,只需使用crypt($input, '$1$...$'),而$1$...$/etc/shadow中哈希的第一部分。

答案 1 :(得分:2)

使用存储在密码文件中的salt:

 $crypted=crypt($_POST['password'], $stored_password);
 if ($crypted==$stored_password) ( // they match

请注意,您不必明确从存储的密码中提取salt,也不必担心算法/ salt大小 - crypt会为您执行此操作。

下进行。

答案 2 :(得分:0)

也许值得研究PAM pecl extension而不是摆弄/ etc / shadow。

此扩展提供PAM(可插入身份验证模块)集成。 PAM是一个处理应用程序和服务的身份验证任务的库系统。该库为应用程序提供了一个稳定的API,以便遵循身份验证任务。