2014-03-28 1 views
-1

간단한 로그인 시스템을 만들고 있는데, 암호가 sha256을 사용하고 데이터베이스에 임의의 숫자를 사용하여 소금을 저장합니다. 그러나 내가 로그인하려고하면 해시를 비교할 때 실패합니다. 왜 누군가는 볼 수 있습니까?로그인 할 때 해시를 비교할 때 오류가 발생했습니다.

<?php 
session_start(); 

$username = $_POST['username']; 
$password = $_POST['password']; 

$mysql_db_hostname = "localhost"; 
$mysql_db_user = "root"; 
$mysql_db_database = "login"; 

$con = mysql_connect($mysql_db_hostname, $mysql_db_user) or die("Could not connect database"); 
mysql_select_db($mysql_db_database, $con) or die("Could not select database"); 

$query = "SELECT password, salt FROM registered_users WHERE username='$username'"; 
$result = mysql_query($query); 
if(mysql_num_rows($result) < 1) //no such user exists 
{ 

      echo 'false'; 
      header('Location: index.php'); 
} 
$userData = mysql_fetch_array($result, MYSQL_ASSOC); 
$hash = hash('sha256', $userData['salt'] . hash('sha256', $password)); 
if($hash != $userData['password']) //incorrect password 
{ 

      echo 'false'; 
      header('Location: index.php'); 

} 
else 
{ 
    echo 'true'; 
    $_SESSION['username']=$row['username'];  

} 
session_write_close(); 

Heres는 내 통과 해시 방법

// hash the password using sha256 a string of 64 characters 
$hash = hash('sha256', $password); 
// create the salt, random string of characters appened to hash 
function createSalt() 
{ 
    $string = md5(uniqid(rand(), true)); 
    return substr($string, 0, 3); 
} 
$salt = createSalt(); 
$hash = hash('sha256', $salt . $hash); 

내가

mysql_query("INSERT INTO registered_users(username, name, email, password,salt)VALUES('$username', '$name', '$email', '$hash', '$salt')"); 
header("location: index.php?remarks-success"); 
mysql_close($con); 
?> 
+0

오류를 작성하실 수 있습니까? – Anri

+0

그냥 암호를 찾을 수 없다고 생각합니다 –

+0

또한 동일한 저장 방법이 사용되었는지 확인하십시오. mysql_fetch_array 대신 mysql_fetch_row를 사용하십시오. –

답변

1

확인을 내 데이터를 삽입 Heres는 어떻게 데이터베이스에 당신이 그것을 확인하는 것과 같은 방법으로 암호를 저장하고 있는지 확인 이리.

암호를 넣으려면 먼저 암호를 해시 한 다음 소금으로 다시 해시해야합니다. 일치하지 않으면 문제가 있습니다.

+0

이것은 내 패스를 만드는 방법입니다 $ hash = hash ('sha256', $ password); // 해시에 추가 된 임의의 문자열을 소금으로 만듭니다. function createSalt() { $ string = md5 (uniqid (rand(), true)); return substr ($ string, 0, 3); } $ salt = createSalt(); $ hash = hash ('sha256', $ salt. $ hash); –

관련 문제