개발 Q&A

제목 password_hash 를 이용하여, 패스워드 암호화를 하려고 합니다.
글쓴이 수석코치 작성시각 2016/03/30 16:47:48
댓글 : 5 추천 : 0 스크랩 : 0 조회수 : 15520   RSS

 

https://opentutorials.org/course/697/3984

첫 참고글은 위와 같습니다.

굉장히 좋은 글입니다.

 

현재 제가 개발하는 상황에서의 PHP 버전은 5.3.3 인데, 위의 주소에서 글을 읽어보면, 5.5 이하 버전에서는 별도의 라이브러리를 추가해서 사용하길 권하고 있습니다만,

그러나, 제가 코드 이그나이터 3.0 버전에서 개발을 하고 있습니다.

if(!function_exists('password_hash')){ //password_hash가 없으면, 별도의 라이브러리를 이용하기 위해 헬퍼로..등록을 했고,
		$this->load->helper('password_helper');
		//$this->load->helper('password');
} 

그런데 신기하게도... -_- 저 if 문이 무시되고 있는 상황입니다.

무엇 때문에 이런 현상이 벌어질까요? - 질문 1 단순히 PHP 버전이 낮아서 그런것일까요? 7 대로 올려야할까요?


login id = "test1" 로 보내서, test1로 연결된 row 정보를 받아서 가지고 왔어요. 

loginPW = 1234 로 입력을 하고, DB 입력은 

$2y$10$COrL.nimE/kkAnvY4QEPm.dX5mLKSNW8jaanOUMkf53mQ3mXJ7Rx2 == 1234 이런 형식으로 암호화 되서 들어간 상태입니다.

그런데, 정작 로그인을 체크하는 부분에서는 

 

if(	$this->input->post('loginid') == $user->loginid && password_verify($this->input->post('loginpw'), $user->loginpw ) ) {
	$this->session->set_userdata('is_login', true);
	$this->load->helper('url');
	redirect("/");
} else {
 	echo "user->loginid (입력): " . $this->input->post('loginid') . "<br>";
 	echo "user->loginid (DB): " . $user->loginid . "<br>";
 	echo "this->input->post('loginpw') : " . $this->input->post('loginpw') . "<br>";
 	echo "user->loginpw : " . $user->loginpw . "<br>";
 	echo "? : " . password_verify($this->input->post('loginpw'), $user->loginpw )  . "<br>";

 	echo "불일치<br><br>";
 	$this->session->set_flashdata('message', '로그인에 실패 했습니다.');
    exit;

    $this->load->helper('url');
    redirect('/auth/login');
}

저 위의 리턴 값을 " ? : " 에 붙여서 출력하면 공백이 나와버리네요...?

흠... -_-

이런 현상을 겪어서 하나를 해결하면.. 두 문제가 생기고 막 해결하기가... 참으로 난감해지고 있습니다..

 

======================================

 

php를.. 너무 낮은 버전을 써서, 그런 것일까요...?

php 7.0 업그레이드... 쉬운 것일까요...? 후 -_- 혹시라도.. 했다가,

운영중인 홈페이지가 운영이 안될까봐 그저 겁이나서 이런답니다.. -_-;

 

태그 password_hash,패스워드암호화,암호화
 다음글 웅파님의 책 소스관련한 질문입니다 (6)
 이전글 테스트 자동화 툴을 만들고 싶은데요.. (6)

댓글

변종원(웅파) / 2016/03/30 17:13:31 / 추천 0
함수검사가 무시되면 뒷쪽에서 password_hash사용하는 부분에서 에러가 나겠죠. 에러 나나요?
수석코치 / 2016/03/30 17:43:40 / 추천 0

아니요! 나지 않습니다. 

if(!function_exists('password_hash')){ //password_hash가 없으면, 별도의 라이브러리를 이용하기 위해 헬퍼로..등록을 했고,
        $this->load->helper('password_helper');
        //$this->load->helper('password');
       echo "A";
} else {
       echo "B";
}

하면, B를 출력합니다! 에러는 나지 않습니다. 밑에

if( $this->input->post('loginid') == $user->loginid && password_verify($this->input->post('loginpw'), $user->loginpw ) ) {

이 부분에서도 else 부분에 echo 를 타고 있습니다. 하여 password_verify를 찍어보면 공백이 리턴 됩니다. .. 흑

수석코치 / 2016/03/30 17:46:27 / 추천 0

아, 추가로 제가 helper 사용을 위해서, 헬퍼 폴더에 password_helper.php 이렇게 저장을 해 놔서,

확장자 제거한  $this->load->helper('파일명'); 

$this->load->helper('password_helper'); 라고 썼는데 이것은 password 라고 썻어도,, 무방한지요...?

물론.. 바꿔서 해도.. echo 는 "B"를 출력을 해서 -_-;

변종원(웅파) / 2016/03/30 17:52:55 / 추천 0
_helper 제거한 파일명입니다. 그거랑 상관없이 B가 찍히면 그 함수가 있다는 겁니다.
수석코치 / 2016/03/31 11:29:19 / 추천 0

5.3.3 버전에는 password_hash 가 없다고 했었는데... 추가가 된 것으로 보입니다..

해결 했어요.. 그냥.. 자연스럽게.. 처음부터 다시 했습니다.. -_-;