2010-11-26 6 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でかなり新しくなっています。なぜそれがうまくいかないのかアドバイスできればとっても感謝しています。どうもありがとう!

EDIT:

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

PASSWORD( '$のNEWPASS')はさらにMySQLのhasingを行うためだけで実現は、それを何ですか?

答えて

関連する問題