php - Logging in issues with salt and hash -
on registration page have used sha1 has , salt store passwords in database. think have done correctly when check database has salt included. how have done it.
$newpassword = $_post['password'] ;   if (!empty($newpassword)) {   //escape bad characters   //$newuser = mysql_real_escape_string($newuser);   //remove leading , trailing whitespace   $newpassword = trim($newpassword);   $newpassword = sha1($newpassword);   $salt = '-45dfehk/__yu349@-/klf21-1_\/4jkup/4';  } else die ("error: enter password"); and input is
    $query = "insert members (memberfirstname, membersecondname, memberemailaddress, memberpassword, memberaddress, memberpostcode) values ('$newfirstname', '$newsecondname', '$newemailaddress', '$newpassword$salt', '$newaddress', '$newpostcode')"; my problem lays when try login. im unsure on how remove salt , unhash password (if needs done). can enter email address , paste hash , salt password field , can login.
this script log in.
<?php include 'db.inc'; session_start(); $useremail =$_post["emailaddress"];  $userpassword =$_post["password"];  $query = "select * members memberemailaddress = '$useremail'           ,  memberpassword = '$userpassword' ";   $connection = mysql_connect($hostname, $username, $password) or die ("unable connect!");  mysql_select_db($databasename) or die ("unable select database!");  $result = mysql_query($query) or die ("error in query: $query. ".mysql_error());  // see if rows returned  if (mysql_num_rows($result) > 0) {     $_session["authenticateduser"] = $useremail;      // relocate logged-in page     header("location: index.php"); }  else    {    $_session["message"] = "could not connect log in $useremail " ;    header("location: login.php");   }     mysql_free_result($result);  mysql_close($connection);   ?> 
there several problems approach. first don't use salt @ all, stored not used. second salt should unique each password, in case static salt used, pepper not salt. further use fast hash algorithm, can brute-forced ways fast, instead should switch hash algorithm cost factor bcrypt or pbkdf2.
php has function hash passwords (maybe need compatibility pack):
// hash new password storing in database. // function automatically generates cryptographically safe salt. $hashtostoreindb = password_hash($password, password_bcrypt);  // check if hash of entered login password, matches stored hash. // salt , cost factor extracted $existinghashfromdb. $ispasswordcorrect = password_verify($password, $existinghashfromdb); because function generates safe salt on own , attaches resulting hash-value, cannot check password sql directly. instead query stored hash (by username), can verify entered password stored one. wrote tutorial tried explain important points more indepth.
Comments
Post a Comment