2017-05-22 2 views
0

보안을 위해 bycrypt를 사용하는 간단한 로그인 시스템이 있습니다. 논리가 간단합니다. 모든 변수가 모두 표시됩니다. 내 열 데이터베이스도 varchar(255)입니다. 제한 문제, 또한 많은 다른 솔루션을 시도하지만 헛된, 내 코드 여기모든 솔루션을 시도 했음에도 불구하고 password_verify가 작동하지 않음

db에 저장된 원래 사용자 이름은 admin이고 암호는 admin123입니다. password_hash('admin123', PASSWORD_BCRYPT) 암호를 생성하여 데이터베이스에 복사하고 붙여 넣기 기능을 실행했습니다!

function validate($data){ 
     $this->db->select("username,password"); 
     $this->db->from('admin'); 
     $query = $this->db->get(); 
     $res= $query->result(); 
     $db_username= $res[0]->username; 
     $db_password= $res[0]->password; 

     $user_username= $data['login_username']; 
     $user_password= $data['login_password']; 

     $user_password=password_hash($user_password, PASSWORD_BCRYPT); 

     if($db_username==$user_username){ 
       //returns true 
       if (password_verify($db_password, $user_password)) { 
         echo "1";//doesnot execute 
       } 
     } 
     else 
     { 
      echo "false"; 
     }  
} 

권장 사항?

답변

2

매개 변수가 password_verify에 올바른 순서로 전달되고 있습니까?

boolean password_verify (string $password , string $hash) 

당신의 해시는 DB에서오고 있기 때문에, 당신은 아마 이런 식으로 통과해야한다가 :

password_verify($user_password, $db_password) 
+0

완벽한 사람! 감사합니다 좋은 일을 계속 ... :) –

3

password_verify()소요 워드 프로세서의 방법에 대한 설명이 반전 말한다 plaintext 암호를 첫 번째 인수로 사용 - 암호 해시가 아닙니다!

password_hash()에 대한 호출이 포함 된 줄을 제거하십시오. 그리고 cristianorbs가 언급했듯이 데이터베이스의 해시는 두 번째 인수 여야합니다.

(사용자 이름을 매개 변수로 전달할 수도 있습니다. 그렇지 않으면 한 명의 관리자 만 가질 수 있습니다.)

+0

완벽한 사람! 고마워, 좋은 일을 계속해라. :) –

관련 문제