当我尝试将新用户的密码放入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个)。怎么了?
答案 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'
)