Vérifiez la Connexion avec Bcrypt Mot de passe

J'ai un site où je suis de la programmation d'un enregistrement/système de connexion avec bcrypt. J'ai inséré les détails de l'inscription avec le hachage de mot de passe dans la base de données. Mon problème est comment authentifier l'utilisateur à l'aide de ce mot de passe haché. Ci-dessous les codes que j'ai utilisé:

Action d'enregistrement:

<? ob_start();//Start buffer output ?>
<html>
<head>
<title>MySite: Registration Action</title>
</head>
<font face="arial">
<?php
session_start();
if(isset($_POST["captcha"])&&$_POST["captcha"]!=""&&$_SESSION["code"]==$_POST["captcha"])
{
//echo "Correct Code Entered";
//Do req stuff
$host="host"; //Host name 
$username="username"; //Mysql username 
$password="password"; //Mysql password 
$db_name="db"; //Database name 
$tbl_name="tbl"; //Table name 
//Connect to server and select database.
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB");
//Get values from form 
$myusername=mysql_real_escape_string($_POST['myusername']);
$mypassword=mysql_real_escape_string($_POST['mypassword']);
$myemail=mysql_real_escape_string($_POST['myemail']);
$mysecrquest=mysql_real_escape_string($_POST['mysecrquest']);
$mysecransw=mysql_real_escape_string($_POST['mysecransw']);
$mypassword_rep=mysql_real_escape_string($_POST['mypassword_rep']);
$myemail_rep=mysql_real_escape_string($_POST['myemail_rep']);
$mysecransw_rep=mysql_real_escape_string($_POST['mysecransw_rep']);
$salt = '$2a$18$' . substr(md5(uniqid(rand(), true)), 0, 22);
$encpass = crypt($mypassword, $salt);
//validate input
if (( !empty($myusername) && !empty($mypassword) && !empty($myemail) && !empty($mysecrquest) && !empty($mysecransw) )
&& (($mypassword_rep==$mypassword)&&($myemail_rep==$myemail)&&($mysecransw_rep==$mysecransw)))
{
//Insert data into mysql 
$sql="INSERT INTO $tbl_name(username, salt, password, email, secrquest, secransw)VALUES('$myusername', '$salt', '$encpass', '$myemail', '$mysecrquest', 
'$mysecransw')";
$result=mysql_query($sql);
//if successfully insert data into database, displays message "Successful". 
if($result){
echo "<center><font color='green'>Congratulations! Your registration was Successful</font></center>";
echo "<BR>";
echo "<center><a href='somepage.php'>Somepage</a></center>";
}
}
else {
echo "<center><font color='red'>You have one or more invalid entries: Your Registration was not successful</font></center>";
echo "<br>";
echo "<center><a href='regpage.php'>Back</a></center>";
}
}
else {
echo "<center><font color='red'>Wrong Captcha: Your Registration was not successful</font></center>";
echo "<br>";
echo "<center><a href='regpage.php'>Back</a></center>";
}
?> 
<?php 
//close connection 
//mysql_close();
?>
</font>
</html>
<? ob_flush();//Flush buffer output ?>

Action Login:

<? ob_start();//Start buffer output ?>
<html>
<head>
<title>MySite: Login Action</title>
</head>
<font face="arial">
<?php
session_start();
if(isset($_POST["captcha"])&&$_POST["captcha"]!=""&&$_SESSION["code"]==$_POST["captcha"])
{
//echo "<font color='green'>Correct Code Entered</font>";
//Do req stuff
$host="host"; //Host name 
$username="username"; //Mysql username 
$password="password"; //Mysql password 
$db_name="db"; //Database name 
$tbl_name="tblx"; //Table name 
$tbl_name2="tbl"; //Table name 2
//Connect to server and select database.
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB");
//Get values from form 
$myusername=mysql_real_escape_string($_POST['myusername']);
$mypassword=mysql_real_escape_string($_POST['mypassword']);
//Validate the login
$sql2="SELECT * FROM $tbl_name2 WHERE username='$myusername'";
$result2=mysql_query($sql2);
$row=mysql_fetch_assoc($result2);
//$count=mysql_num_rows($result2);
//If result matched $myusername and $mypassword, table row must be 1 row
//if($count==1)
//$salt = '$2a$18$' . substr(md5(uniqid(rand(), true)), 0, 22);
$encpass = crypt($mypassword, $salt);
if ($encpass == $row['password'])
{
session_start();             
$_SESSION['myusername'] = $myusername;
header ("Location: memberspage.php");
}
else {
echo "<center><font color='red'>Invalid Login Details. Not Logged In.</font></center>";
echo "<br>";
echo "<center><font color='red'>Please go back and try again.</font></center>";
echo "<br>";
echo "<center><a href='loginpage.php'>Back</a></center>";
}
}
else {
echo "<center><font color='red'>Wrong Captcha. Not Logged In.</font></center>";
echo "<br>";
echo "<center><font color='red'>Please go back and try again.</font></center>";
echo "<br>";
echo "<center><a href='loginpage.php'>Back</a></center>";
}
?>
<?php 
//close connection 
//mysql_close();
?>
</font>
</html>
<? ob_flush();//Flush buffer output ?>

Toute aide est appréciée. Merci.

double possible de bcrypt et généré de façon aléatoire des sels
Première: <font face="arial"> est obsolète et très mauvais depuis 1999 (!!).
hors sujet, mais votre code ressemble horriblement out-of-date, ... il est à noter que la <center> et <font> balises sont obsolète en HTML (CSS), comme le sont les mysql_xxx() des fonctions PHP (utiliser PDO à la place).
Et: mysql_query est également extrêmement dépassée.
Merci à vous tous pour les observations... 1. Je vais intégrer le css pour remplacer les codes obsolètes dès que je peux, 2. Je suis actuellement en apprentissage de l'AOP, et reprendrait-il trop dès que je peux, 3. Je vais intégrer de PHP dans password_hash() fonction dès que mon hôte prend en charge (essayé mais j'ai reçu un "undefined function" d'erreur). Merci.

OriginalL'auteur adeoba | 2013-07-22