2012-06-27 70 views
0

我正在測試一個sql查詢,並且正確地輸入了用戶名和密碼,但它沒有給我匹配。用戶名和密碼不匹配DB

下面是查詢的輸出:

SELECT * FROM wp_users where user_login='User' and user_pass='pass' 

我可以看到我已經輸入得當,但仍返回false。

我知道密碼是在MD中的MD。

我需要解碼查詢中的變量嗎?如果是這樣如何?

我已經試過這一點,但沒有奏效:

$SQL = "SELECT * FROM wp_users where user_login='".$username."' and user_pass='".md5($password)."'"; 

UPDATE:

這是MD5的contaent($密碼) - 3fc0a7acf087f549ac2b266baf94b8b1

,這是什麼在數據庫:$ P $ BfzHHqBF88q4RHJsAiVf4m7.ulbgCZ1

它們都應該是相同的:o/

+1

當你說它返回false時,你如何測試這個?您是否嘗試將第二個查詢的輸出直接粘貼到php myadmin或mysql命令行中以查看它輸出的內容? –

+0

查詢是正確的。如果返回0結果,則表示用戶名或密碼錯誤。只需'md5($ password)'並與db中的內容進行比較。 – sachleen

+0

發佈數據庫散列密碼的示例。顯然,你需要爲此使用一些測試帳戶,而不是真正的用戶密碼。 –

回答

0

確定密碼在被存儲到數據庫中之前沒有被醃過?如果他們是你需要做這樣的事情:

$SQL = sprintf("SELECT * FROM wp_users where user_login='%s' and user_pass='%s'", $username, md5($salt.$password)); 

我也想看看mysql_real_escape_string和PDO準備語句,而不是直的MySQL

+0

關於沒有工作,但你沒有得到一個直MD5散列......這是不同的。我正在使用wordpress版本3.3 – Satch3000

0

它看起來像在數據庫中的密碼存儲與Crypt功能..看:

$pw="thisismypassword"; 
echo crypt($pw); // $1$lmJBSDCp$AcU45N45sUhdglYn28T4X/ 
echo md5($pw); //31435008693ce6976f45dedc5532e2c1 

嘗試在您的查詢中使用crypt。 Crypt也使用了我認爲在wp_config.php文件中的「Salt」。

+0

有沒有可以手動將鹽添加到上面的代碼? – Satch3000

1

最簡單的就是調用Wordpress函數wp_hash_password(password)。在這種情況下,您的查詢看起來像:

require_once '/path/to/wp-config.php'; //will load up wordpress, such as if you're doing this from a script 
$SQL = "SELECT * FROM wp_users where user_login='".$username."' and user_pass='".wp_hash_password($password)."'"; 

的WordPress不使用標準MD5,而是phpass庫,哈希用戶密碼。所以,如果你想從Wordpress之外做到這一點,那麼你需要看看這個庫。下面是實現wp_hash_password()方法使用phpass代碼:

if (!function_exists('wp_hash_password')) : 
/** 
* Create a hash (encrypt) of a plain text password. 
* 
* For integration with other applications, this function can be overwritten to 
* instead use the other package password checking algorithm. 
* 
* @since 2.5 
* @global object $wp_hasher PHPass object 
* @uses PasswordHash::HashPassword 
* 
* @param string $password Plain text user password to hash 
* @return string The hash string of the password 
*/ 
function wp_hash_password($password) { 
    global $wp_hasher; 

    if (empty($wp_hasher)) { 
      require_once(ABSPATH . 'wp-includes/class-phpass.php'); 
      // By default, use the portable hash from phpass 
      $wp_hasher = new PasswordHash(8, TRUE); 
    } 

    return $wp_hasher->HashPassword($password); 
} 
endif; 

你可以按照相同的模式可能會得到相同的內容:

require_once '/path/to/wp-includes/class-phpass.php'; 
$my_hasher = new PasswordHash(8, TRUE); 
$SQL = "SELECT * FROM wp_users where user_login='".$username."' and user_pass='". $my_hasher->HashPassword($password)."'"; 
+0

我嘗試了上面的和哈希看起來非常相似,但仍然沒有匹配 – Satch3000

+1

您可能需要查看您的特定版本的wordpress中的wordpress代碼以獲取更多詳細信息 –

0

檢查在INSERT/UPDATE使用加密功能wp_users命令。 在MySQL中有一堆加密函數。看看here

對於登錄目的,經常使用Password(string)