2010-11-26 2 views
1

기본 사용자를 구현하기 위해 튜토리얼을 작성하고 소금으로 시스템에 로그인하십시오. 현재 가입 단계에서이 번호를 사용하고 있습니다.이 PHP + SALT 구현을 빠르게 확인하십시오 - 작동하지 않습니까?

define('SALT_LENGTH', 9); 

function generateHash($plainText, $salt = null) 
{ 
    if ($salt === null) 
    { 
     $salt = substr(md5(uniqid(rand(), true)), 0, SALT_LENGTH); 
    } 
    else 
    { 
     $salt = substr($salt, 0, SALT_LENGTH); 
    } 

    return $salt . sha1($salt . $plainText); 
} 

$newpass = generateHash($_POST['newpass']); 

followed by: 

$sql = "INSERT INTO user SET 
       userid = '$_POST[newid]', 
       password = PASSWORD('$newpass'), ... etc" 

잘 작동합니다.

는 지금 (별도의 액세스 제어 파일에서) 평등를 확인하기 위해 비밀번호 입력을 비교하려면 : 원칙적으로

define('SALT_LENGTH', 9); 

function generateHash($plainText, $salt) 
{ 

    $salt = substr($salt, 0, SALT_LENGTH); 

    return $salt . sha1($salt . $plainText); 
} 

$sql = "SELECT password FROM user WHERE 
     userid = '$uid'"; 
$result = mysql_query($sql); 
$row = mysql_fetch_row($result); 


$comparepwd = generateHash($pwd, $row['password']); 


if (mysql_num_rows($result) == 0 || $comparepwd != $row['password']) { 

//access denied, unset session variables 
} 

내가이 일 전망이다. 필자는 PHP/MySQL에 대해 상당히 새롭기 때문에 PHP가 왜 작동하지 않는지에 관해 조언 할 수 있다면 매우 감사 할 것입니다. 매우 감사합니다!

편집 : 그냥 실현, 그것은

INSERT INTO user SET 
        userid = '$_POST[newid]', 
        password = PASSWORD('$newpass') 

패스워드 ('$의 newpass로')가 더 MySQL의 hasing을 수행하기 때문이다?

답변

관련 문제