PHP

35. PHP 비밀번호 암호화&복호화 password_hash, password_verify

drizzle0925 2021. 8. 3. 15:49
728x90

회원가입 폼에서 비밀번호를 사용자에게 입력받아 그대로 DB에 넣고 DB 정보가 외부에 노출 됐을경우 큰 문제가 발생합니다. 이러한 사태를 방지하기 위해서 패스워드는 암호화해서 데이터를 넣어주어야 하고 암호화 된 데이터는 복호화해서 비교, 값이 일치했을 때 로그인 되도록 해야합니다.

 

이럴때 사용하는 함수가 password_hash(암호화), password_verify(복호화)입니다.

 

이 함수는 php 버전 5.3.7 이상인 환경에서만 사용가능하고 5.3.7 버전보다 낮을 경우에는 아래 파일을 include해서 사용하시면 됩니다.

password.php
0.01MB

 

include 방법

<?php
include "./password.php";
?>

 

 

회원가입 때 입력받은 패스워드를 저장할 때는 아래와 같이 사용하면 됩니다.

<?php 
// 회원가입 화면에서 입력받은 아이디와 비밀번호를 변수에 저장
$id = $_POST['id'];
$password = $_POST['password'];

// 비밀번호를 암호화 처리
$encrypted_password = password_hash($password, PASSWORD_DEFAULT);

// 비밀번호를 DB에 저장
$sql = "INSERT INTO user(id, password) VALUES('{$id}','{$encrypted}')";
...
?>

 

 

로그인화면에서 아이디와 패스워드를 비교할 때는 아래와 같이 사용하면 됩니다.

<?php 
// $password는 로그인 화면에서 입력받은 비밀번호 입니다.
// $db_password는 DB에서 읽어온 암호화된 비밀번호 입니다.
if(password_verify($password, $db_password)) {
    echo '로그인 성공';
} else {
    echo '로그인 실패';
}
?>

 

 

아래 코드를 실행해서 새로고침을하면 매번 다른 값이 화면에 표시되는 것을 확인할 수 있습니다.

<?php
echo password_hash($password, PASSWORD_DEFAULT);

 

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

즉, 만일 DB정보가 노출되어도 비밀번호 값을 알아내기가 어렵습니다.

<?php
if(password_verify($password, $db_password))
728x90