Что не так с этими паролями? - PullRequest
1 голос
/ 24 августа 2011

Когда я пытаюсь поместить пароль нового пользователя в базу данных 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 голосов
/ 24 августа 2011

Убедитесь, что в таблице указана правильная длина столбца.Это самая распространенная проблема.Ваше поле должно быть не менее VARCHAR(64)

3 голосов
/ 24 августа 2011

Не думаю, что вам следует использовать ключевое слово PASSWORD: http://dev.mysql.com/doc/refman/5.1/en/encryption-functions.html#function_password

Функция PASSWORD () используется системой аутентификации в MySQL Server;Вы не должны использовать его в своих собственных приложениях.Для этого рассмотрим MD5 () или SHA1 ().Также см. RFC 2195, раздел 2 (Механизм проверки подлинности с ответом на запрос (CRAM)), для получения дополнительной информации о безопасной обработке паролей и аутентификации в ваших приложениях.

Но вы уже хешировали пароль на1-я строка кода.Просто вставьте это прямо в базу данных ...

0 голосов
/ 24 августа 2011

Это потому, что вы используете функцию PASSWORD('%s') в своем запросе (то есть вы дважды хешируете свой пароль).

Просто вставьте его как другие значения ('%s')

0 голосов
/ 24 августа 2011

Вы проверяли значение $encPassword перед INSERT?

...