我正在尝试将影子密码与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;
}
当我在阴影中替换结果时,它可以使用密码,但它有不同的特性,我可以比较它。
谢谢
答案 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,以便遵循身份验证任务。