php比较两个密码字符串

时间:2015-02-09 21:33:16

标签: php explode strcmp

我正在使用explode()将从文本文件中读取的字符串转换为数组,我用它来与用户的输入进行比较。

文本文件包含:

 user#test //user= username test= password

当我尝试使用strcmp()时,即使打印输出为

的两个字符串变量结果,它也会返回-1
test||test
=-1
我打印的

if(isset($user_details[1])){
$user_details = explode('#', $user);     //   $user is text file
$passW = $_GET['password'];              //   input: "test"
$tesPW = user_details[1];
printf($passW."||".$testPW."=".strcmp($passW,$testPW));
}

2 个答案:

答案 0 :(得分:2)

假设这是一个针对有限环境中选定人群的简单应用程序,我将避免评论与此方法相关的安全问题。

如果用户/通行证与文件中的一行匹配,则此函数将返回true,如果不匹配,则返回false

//Assumes const USERACCOUNTFILE defines the path to the file
function AuthenticateUser ($username, $password) {
    $handle = @fopen(USERACCOUNTFILE, "r"); //Open the file for reading
    if ($handle) {
        while(($line = fgets($handle)) !== false) { //Read each line of the file
            $line = explode('#', $line); //Split the line
            if($line && count($line) == 2) { //Does the line have the expected number of values?
                //Compare the values minus all whitespace
                if(trim($line[0], "\r\n\t ") === $username && trim($line[1], "\r\n\t ") === $password) {
                    fclose($handle);
                    return true; //Found a match
                }
            }
        }
    }
    fclose($handle);
    return false; //None matched
}

您也可以使用trim($line[0])而不使用"\r\n\t "的可选参数作为默认参数。

答案 1 :(得分:0)

如果strcmp返回-1是由于$ passW小于$ testPW http://php.net/manual/en/function.strcmp.php

如果$ user有字符串" user#test // user = username test = password"你赚了$ user_details = explode('#',$ user);你有user_details [1];字符串" test // user = username test = password&#34 ;;