2010-03-18 40 views
0

我试图比较影子密码与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; 
} 

密码,它与密码的工作,但它是有不同的性格如何,我可以比较一下。

感谢

回答

2

你的函数创建使用PHP rand功能的随机盐(可变seed)。因此,您的盐将与阴影文件中现有密码所使用的盐不同。

如果你想比较哈希值(即比较你crypt电话与shadow值的输出),散列都需要与相同盐被创建。因此,您需要使用阴影文件中现有密码的盐(= $1$...$部分),而不是随机创建自己的密码。

换句话说,放弃你的功能,只是用crypt($input, '$1$...$')代替,$1$...$/etc/shadow中散列的第一部分。

0

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

此扩展提供PAM(Pluggable Authentication Modules)集成。 PAM是处理应用程序和服务的验证任务的库系统。该库为应用程序提供了一个稳定的API,以便进行身份验证任务。
2

使用存储在口令文件中盐:

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

注意,您不必明确地从存储的密码提取盐,也不用担心算法/盐大小 - 隐窝会替您。

C.