PHP шифрование пароля

0

Я хочу сохранить введенный пароль и войти в базу данных, а затем получить его и проверить правильность ввода данных пользователя. Я, должно быть, неправильно понял что-то функциональное о функции склепа, потому что мой очень простой скрипт не работает. Вот:

<?php
header("Content-Type: text/plain");
     mysql_connect('localhost','root','') or die('Cannot connect mysql server');
       mysql_select_db('ChemAlive_login')  or die('cannot connect database');

$user_input='test';
$mail='[email protected]';

 $password = crypt($user_input);

  $q=mysql_query("select * from login where mail='".$mail."' ") or die(mysql_error());
  $n=mysql_fetch_row($q);
 if($n>0)
{
  $q=mysql_query("select password  from login where mail='".$mail."' ");
  $pp=mysql_fetch_row($q);
  if(crypt($user_input,$pp[0])==$pp[0]) echo "ok";
  else echo "wrong";
}
else
{   $insert=mysql_query("insert into login values('".$mail."','".$password."')") or die(mysql_error());
echo "insert";}
?>

При первом входе в систему вводятся логин и адрес электронной почты, а вставки "вставить" - эхо. Но на втором этапе у меня есть "неправильное" эхо, и я не понимаю, почему.

благодаря

Теги:
encryption
passwords

3 ответа

0
Лучший ответ

Зачем использовать crypt, почему бы не использовать md5 или лучше еще sha1? Это означало бы переписывание кода следующим образом: sha1:

<?php
 header("Content-Type: text/plain");
 mysql_connect('localhost','root','') or die('Cannot connect mysql server');
 mysql_select_db('ChemAlive_login')  or die('cannot connect database');

 $user_input='test';
 $mail='[email protected]';

 $password = sha1($user_input);

 $q=mysql_query("select * from login where mail='".$mail."' ") or die(mysql_error());
 $n=mysql_num_rows($q); //not mysql_fetch_row, as that does not return count but an array
 if($n>0)
 {
  $q=mysql_query("select password  from login where mail='".$mail."' ");
  $pp=mysql_fetch_row($q);
  if(sha1($user_input)==$pp[0]) {
    echo "ok";
  }
  else {
   echo "wrong";
  }
}
else
{   
 $insert=mysql_query("insert into login values('".$mail."','".$password."')") or die(mysql_error());
echo "insert";
}
?>

ЗАМЕТКИ:

  1. Рассмотрите возможность использования функций mysqli_ *, а не mysql_ *, поскольку они устарели.

  2. В настоящее время ваш код подвержен множеству уязвимостей, особенно если ваши значения не экранированы.

  3. Есть ли какая-то особая причина для установки вашего типа контента в text/plain? Это PHP-скрипт.

  • 0
    Я получаю "неправильное" эхо с этим. Я не понимаю, как это возможно.
  • 0
    когда вы говорите "неправильное" эхо, как вы имеете в виду?
Показать ещё 3 комментария
0

Вы должны изменить

if(crypt($user_input,$pp[0])==$pp[0])

в

if(crypt($user_input)==$pp[0])

Вы пытались использовать $pp[0] в качестве соли для функции склепа. Соль - это то, что определяет алгоритм шифрования. По мере того, как вы оставили этот аргумент пустым на вставке passwort, функция crypt автоматически использовала MD5 для шифрования.

  • 0
    Я все еще получаю "неправильное" эхо ...
0

Это поможет (возможно, не рекомендовал php.net):

http://php.net/manual/en/function.crypt.php

У вас могут быть проблемы, потому что у вас нет второго аргумента.

поваренная соль

Необязательная соль-строка, чтобы основать хеширование. Если это не предусмотрено, поведение определяется реализацией алгоритма и может привести к неожиданным результатам.

  • 0
    Спасибо, но это то, с чего я начал, и я до сих пор не могу понять проблему

Ещё вопросы

Сообщество Overcoder
Наверх
Меню