1

当我尝试将新用户的密码放入 MySQL 数据库时,它没有正确加密它。这是我正在使用的代码:

$encPassword = hash('sha256', $_POST['password']); 
    $query = sprintf("INSERT INTO users(`userName`,`email`,`password`) 
        VALUES('%s','%s',PASSWORD('%s'))", 
        mysql_real_escape_string($_POST['userName']), 
        mysql_real_escape_string($_POST['email']), 
        mysql_real_escape_string($encPassword))or die(mysql_error()); 
    $sql = mysql_query($query); 

但是,当我检查数据库时,它不会将密码存储为 sha256 加密。它只有 16 个随机字符(应该有 ~50 个)。它出什么问题了?

4

4 回答 4

4

检查您的表格中允许的列长度是否正确。这是最常见的问题。您的字段必须至少为VARCHAR(64)

于 2011-08-23T23:02:55.927 回答
3

我认为您不应该使用 PASSWORD 关键字:http ://dev.mysql.com/doc/refman/5.1/en/encryption-functions.html#function_password

MySQL Server 中的身份验证系统使用 PASSWORD() 函数;您不应该在自己的应用程序中使用它。为此,请考虑使用 MD5() 或 SHA1()。另请参阅 RFC 2195 第 2 节(质询-响应身份验证机制 (CRAM)),了解有关在应用程序中安全处理密码和身份验证的更多信息。

但是,您已经在第一行代码中对密码进行了哈希处理。直接把它插入数据库...

于 2011-08-23T23:09:38.077 回答
0

你检查过$encPassword之前的值INSERT吗?

于 2011-08-23T23:04:06.503 回答
0

这是因为您PASSWORD('%s')在查询中使用了函数,(所以您对密码进行了双重哈希处理)。

只需将其插入为其他值 ( '%s')

于 2011-08-23T23:07:18.503 回答