2011-05-30 96 views
0

將新用戶插入數據庫時​​,我想散列密碼。這是我得到的。php哈希函數檢查數據庫

static function getLastId(){ 
     global $database; 
     $sql = 'SELECT ID from users ORDER BY id DESC LIMIT 1' ; 
     $result = $database->query($sql);   
     return $result; 
    } 


static function create_user($username,$password){ 
    global $database; 
    $lastID = self::getLastId() + 1;  
    $ePassword = $database->escape_value($password); 
    $hash = hash('sha256', $lastID . $ePassword); 
    $sql = "INSERT INTO ". self::$table_name . " (username, password, first_name, last_name, power) VALUES "; 
    $sql .= "('{$database->escape_value($username)}', '{$hash}', 'asd' , 'asd', 'user') "; 
    $query = $database->query($sql); 
    return ($query)? true : false; 
} 

當我這樣做$ lastID的打印或VAR轉儲我得到13.不過找一個數據庫我只有1個用戶的我,以1爲ID我甚至截斷的表,但我仍然得到13.不知道爲什麼。

基本上這個想法是,我想追加$ lastID到密碼,所以這是很難倒過來。爲了登錄目的,我需要知道下一個ID將會是什麼。

+0

您應該使用鹽來代替這是最後的想法。你可以在這裏瞭解它:http://phpsec.org/articles/2005/password-hashing.html – 2011-05-30 13:25:54

+1

而不是使用sha256,嘗試使用更安全的算法,如bcrypt:[http://codahale.com/how- to-safely-store-a-password /](http://codahale.com/how-to-safely-store-a-password/) – 2011-05-30 13:33:16

回答

2
$result = $database->query($sql);   
return $result; 

你返回結果的資源,而不是實際的數據(我假設是這樣,除非您的$數據庫模塊自動執行此操作),你可能想:

$result = $database->query($sql);  
$data = mysql_fetch_array($result); 
return $data['ID']; 
+0

謝謝。不能相信我錯過了那個 – dgamma3 2011-05-31 03:19:56