상세 컨텐츠

본문 제목

php 비밀번호 암호화 복호화 password_verify, password_hash

IT공부방/PHP

by 동해둘리 2019. 3. 5. 16:47

본문

반응형

php 에서 비밀번호를 암호화 하거나 복호화 할때 사용하는 함수가 있습니다. password_hash 함수와 password_verify 함수가 그것인데요,


password_hash 함수는 암호화 할때 password_verify  함수는 복호화 할때 사용합니다



다만, 이 함수는 php 버번 5.3.7 이상일 경우에 한해서 사용이 가능합니다.

그 이하 버전에서 사용하고자 할 경우에는 별도로 include 해줘야 합니다


<?

include "./password.php";

?>


include  할 파일은 아래에 링크를 걸어두었습니다.


password.php




php 버전 5.3.7 이상일 경우에는 내장함수로 지원하기 때문에 별도로 include 할 필요가 없습니다.



회원가입시에 입력받은 아이디를 DB에 저장할 경우 아래와 같이 사용하시면 됩니다.



<?
// 회원가입 화면에서 입력받은 비밀번호를 가져옵니다
    $user_passwd = $_REQUEST['txtPassword1'];
    $user_id = $_REQUEST['txtPassword1'];

// 비밀번호를 암호화 합니다
    $encrypted_passwd = password_hash($user_passwd, PASSWORD_DEFAULT);

// 비밀번호를 DB 에 저장합니다
    $query = " INSERT INTO member ( id, passwd ) VALUES ( '$user_id', '$encrypted_passwd ') ";

?>



그리고 로그인 화면에서 입력받은 비밀번호를 DB에 저장된 비밀번호와 비교할 때는 아래와 같이 하시면 됩니다.


// $user_passwd 는 로그인시 입력받은 비밀번호
// $db_passwd 는 DB에서 읽어온 암호화된 비밀번호

        if ( password_verify($user_passwd, $db_passwd))
        {           
            // 로그인 성공
        }
else
{
// 로그인 실패
}



참고로, 아래와 같이 암호화된 비번을 출력해보면, 실행할 때마다 다른 값이 나옵니다.

같은 비밀번호라고 해도 DB에 저장되는 값은 매번 바뀐다는 겁니다. 


echo password_hash($user_passwd, PASSWORD_DEFAULT);



하지만 아래와 같이 비교할 때는, DB에 어떤값이 저장되어 있더라도 비교가 가능합니다.

즉, DB정보가 노출되더라도 비밀번호값을 알아내기가 쉽지 않다는 겁니다


if ( password_verify($user_passwd, $db_passwd))











반응형

관련글 더보기

댓글 영역