我正在测试一个sql查询,我正在正确输入用户名和密码,但它没有给我匹配。
这是查询的输出:
SELECT * FROM wp_users where user_login='User' and user_pass='pass'
我可以看到我已正确键入它但仍然返回false。
我知道密码在db中的md5中。
我是否需要解码查询中的变量?如果是这样的话?
我试过这个,但它不起作用:
$SQL = "SELECT * FROM wp_users where user_login='".$username."' and user_pass='".md5($password)."'";
更新:
这是md5($密码)的含义 - 3fc0a7acf087f549ac2b266baf94b8b1
这就是数据库中的内容:$ P $ BfzHHqBF88q4RHJsAiVf4m7.ulbgCZ1
它们都应该是相同的:o /
答案 0 :(得分:1)
最简单的事情是调用Wordpress函数wp_hash_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外部执行此操作,那么您将需要查看该库。这是使用phpass实现wp_hash_password()方法的代码:
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)."'";
答案 1 :(得分: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
答案 2 :(得分:0)
看起来数据库中的密码与Crypt函数一起存储.. look:
$pw="thisismypassword";
echo crypt($pw); // $1$lmJBSDCp$AcU45N45sUhdglYn28T4X/
echo md5($pw); //31435008693ce6976f45dedc5532e2c1
尝试在查询中使用crypt。 Crypt也使用“Salt”,我相信wp_config.php文件。
答案 3 :(得分:0)
检查INSERT / UPDATE wp_users命令中使用的加密函数。 在MySQL中有一堆加密函数。看看here。
出于登录目的,经常使用Password(string)
。