2015-03-24 2 views
0

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

<?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";} 
?> 

Вставить вступительные испытания и электронную почту для вставки и вставить «эхо-шоу». Но на втором этапе у меня есть «неправильное» эхо, и я не понимаю, почему.

Благодаря

ответ

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. Есть ли какая-то особая причина для установки вашего типа контента на текст/равную? Это PHP-скрипт.

+0

я получаю «неправильно» эхо с тем, чтобы. Я не понимаю, как это возможно. – Laetis

+0

, когда вы говорите «неправильное» эхо, как вы это понимаете? – NaijaProgrammer

+0

if (sha1 ($ user_input) == $ pp [0]) echo "ok"; else echo "wrong" – Laetis

0

Это поможет (косяк recommned php.net достаточно):

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

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

соль

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

+0

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

0

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

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

в

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

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

+0

я все еще получаю «неправильно» эхо ... – Laetis

Смежные вопросы