2011-09-06 4 views
0

이 검사 암호 내 해시 코드, hashing.php입니다로그인에 문제가 있습니까? mysql에서 해쉬 된 암호로 입력 암호를 ​​확인 했습니까?

<?php 
     //compare password with hashed one 
     public static function check_password($hash,$password) { 
      $full_salt=substr($hash,0,29); 

      $new_hash=crypt($password,$full_salt); 

      return ($hash==$new_hash); 
     } 
?> 

이 login.php

<?php 
    require("scripts/hashing.php");    
    $password=$_POST['txtPassword']; 

    //checking in database if password exists or not 
    $checkPassword=mysql_query("SELECT * from $tbl_name WHERE Password='".$password."'"); 

    $resultPassword=mysql_fetch_array($checkPassword); 

    if(!hashing::check_password($resultPassword['Password'],$password)) { 
    //back to login 
    } 
?> 

입니다 문제는, 그 사용자 입력 잘못된 암호, 그것은 사용자를 허용하는 경우에도 로그인하기.

당신은 $ _POST에서 원시 비밀번호를 당겨 해시 된 암호를 비교하는

<?php 
    class hashing { 

     //blowfish 
     private static $algo='$2a'; 

     //cost parameter 
     private static $cost='$10'; 

     public static function unique_salt() {   
      return substr(sha1(mt_rand()),0,22); 
     } 

     //generate a hash 
     function myhash($password) {        
      return crypt($password,self::$algo.self::$cost.'$'.self::unique_salt()); 
     } 

     //compare password with hashed one 
     public static function check_password($hash,$password) { 
      $full_salt=substr($hash,0,29); 

      $new_hash=crypt($password,$full_salt); 

      return ($hash==$new_hash); 
     }    
    } 
?> 
+0

당신이 당신의 반환 문 앞에 결과를 에코하려고 죽을? echo 'hash : "'. $ hash. '"== "'. $ new_hash. '"'; –

+0

사용자가 데이터베이스에없는 암호를 입력하면 어떻게됩니까? '$ resultPassword'는 무엇이 될까요? 그리고 그 값에 대해서'check_password'는 무엇을할까요? – Konerak

+0

논리에 결함이 있습니다. 먼저 데이터베이스에서 패스워드가 주어진 패스워드와 같은 모든 행을 얻습니다 (POST에서 곧바로, 암호화되지 않은 패스). 그런 다음 그들이 평등한지 확인하십시오. 뭐라 짐작합니다 - 그들이 있습니다! 그렇지 않으면 SELECT가 작동하지 않았을 것입니다. – Konerak

답변

0

좋아요, 저는 그것을 해결하기 위해 md5를 사용했습니다. 등록에서

:

$pass_hash=md5(mysql_real_escape_string($_POST['txtPassword'])); 
$insertQuery="INSERT INTO $tbl_name(Password) VALUES ('".$pass_hash."')"; 
$insert=mysql_query($insertQuery) or die ("Failed to register"); 

로그인에서 :

$pass_hash=md5(mysql_real_escape_string($_POST['txtPassword'])); 
$checkLogin=mysql_query("SELECT * from $tbl_name WHERE Username='".$username."'AND Password='".$pass_hash."'"); 
if(mysql_num_rows($checkLogin)==1) { 
    $row=mysql_fetch_array($checkLogin); 
    echo "Login success!"; 
} 
else { 
    echo "Login failed!"; 
} 
1

편집 할 수 있습니다.

// Encrypted so that it can match in the database, otherwise it will never match up 
$password = my_crypt_fnction($_POST['txtPassword']); 

//checking in database if password exists or not 
$checkPassword=mysql_query("SELECT * from $tbl_name WHERE Password='".$password."'"); 
+0

그러면 암호가 작동하는 이유는 무엇입니까? – Konerak

+0

예. 데이터베이스에서 해시 된 값을 비교해 보겠습니다. – deepz

+0

아마도 코드에 논리 오류가 더 많기 때문일 수 있습니다. 이 문제를 해결하는 것은 1 단계입니다. –

관련 문제