php 比较两个密码字符串
php comparing two password strings
我正在使用 explode() 将从文本文件读取的字符串转换为数组,我用它来与用户的输入进行比较。
文本文件包含:
user#test //user= username test= password
当我尝试使用 strcmp() 时,它 returns -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));
}
if strcmp return -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";
假设这是一个简单的应用程序,适用于有限环境中的 select 一群人,我将避免评论与此方法相关的安全问题。
如果 user/pass 匹配文件中的一行,此函数将 return 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 "
,作为默认参数就足够了。
我正在使用 explode() 将从文本文件读取的字符串转换为数组,我用它来与用户的输入进行比较。
文本文件包含:
user#test //user= username test= password
当我尝试使用 strcmp() 时,它 returns -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));
}
if strcmp return -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";
假设这是一个简单的应用程序,适用于有限环境中的 select 一群人,我将避免评论与此方法相关的安全问题。
如果 user/pass 匹配文件中的一行,此函数将 return 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 "
,作为默认参数就足够了。