Проблема с md5 и хэшем - PullRequest
       0

Проблема с md5 и хэшем

1 голос
/ 05 августа 2011
<form action="inc/login/login.php" method="post" id="userLogon">
    <div class="field required">
        Username: <input type="text" name="regduser" tabindex="1" /><br />
        </div>
        <div class="field required">
        Password: <input type="password" name="regdpass" tabindex="2" /><br />
        </div>
        <input type="submit" name="submitUser" />
</form>

PHP

<?php
ob_start();
$host="localhost"; // Host name 
$username="root"; // Mysql username 
$password=""; // Mysql password 
$db_name="ureviewdu"; // Database name 
$tbl_name="Student"; // Table name

// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB");

// Define $myusername and $mypassword 
$myusername=$_POST['regduser']; 
$mypassword=$_POST['regdpass'];

// To protect MySQL injection (more detail about MySQL injection)
$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);

$sql="SELECT * FROM $tbl_name WHERE uname='$myusername' and upass='$mypassword'";
$result=mysql_query($sql);

// Mysql_num_row is counting table row
$count=mysql_num_rows($result);
// If result matched $myusername and $mypassword, table row must be 1 row

if($count==1){
// Register $myusername, $mypassword and redirect to file "login_success.php"
session_register("regduser");
session_register("regdpass"); 
header("location:login_success.php");
}
else {
echo "Wrong Username or Password";
}

ob_end_flush();
?>

Представление БД img1

Когда я нажимаю "Отправить" для ввода Джо Джо для пользователя и передать. Как мне заставить php распознать joe для pass на самом деле '55abd89cb7ab6742370f0ad912fef335'? Как мне получить PHP, чтобы иметь возможность расшифровать это?

Любой

Ответы [ 3 ]

4 голосов
/ 05 августа 2011
SELECT * FROM $tbl_name WHERE uname='$myusername' and upass=MD5('$mypassword')

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


Если пароль в базе данных уже засолен, вам нужно объединить открытый текстовый пароль с той же солью до хеширования . В идеале, каждый пользователь имеет свою уникальную случайную соль, хранящуюся в одной строке с uname и upass. Тогда вы можете сделать это:

SELECT * FROM $tbl_name WHERE uname='$myusername' 
  AND upass=MD5(CONCAT(usalt, '$mypassword'))
1 голос
/ 05 августа 2011

Хэш-пароль также при входе:

$sql = "SELECT * FROM $tbl_name
    WHERE uname = '$myusername' and upass = MD5('$mypassword')";

Кстати, если ваша система еще не работает, я настоятельно рекомендую вам поискать более безопасный алгоритм хеширования, такой как SHA256,Не требуется особых изменений, если у вас есть возможность сбросить текущие записи пароля:

$sql = "SELECT * FROM $tbl_name
    WHERE uname = '$myusername' and upass = SHA2('$mypassword', 256)";
0 голосов
/ 05 августа 2011

Чтобы ответить на ваш вопрос напрямую, не давая мнения о том, что является более безопасным:

Когда я нажимаю "Отправить" для ввода joe joe для пользователя и передачи.Как мне заставить php распознать joe для pass на самом деле '55abd89cb7ab6742370f0ad912fef335'?Как мне получить PHP, чтобы иметь возможность расшифровать это?

$mypassword = md5(stripslashes($mypassword));

$sql="SELECT * FROM $tbl_name WHERE uname='$myusername' and upass='$mypassword'";
$result=mysql_query($sql);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...