这些密码有什么问题?

时间:2011-08-23 23:01:08

标签: php mysql encryption passwords sha256

当我尝试将新用户的密码放入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 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:3)

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

  

PASSWORD()函数由身份验证系统使用     MySQL服务器;你不应该在自己的应用程序中使用它。对于     为此,请考虑使用MD5()或SHA1()。另请参阅RFC 2195,     第2节(质询 - 响应认证机制(CRAM)),     有关处理密码和身份验证的详细信息     安全地在您的应用程序中。

但是,您已经在第一行代码上删除了密码。只需将其直接插入数据库......

答案 2 :(得分:0)

您是否在$encPassword之前检查了INSERT的价值?

答案 3 :(得分:0)

这是因为您在查询中使用了PASSWORD('%s')函数(因此您需要对密码进行双重哈希)。

只需将其作为其他值('%s'

插入即可