IT공부방/PHP
php 비밀번호 암호화 복호화 password_verify, password_hash
동해둘리
2019. 3. 5. 16:47
반응형
php 에서 비밀번호를 암호화 하거나 복호화 할때 사용하는 함수가 있습니다. password_hash 함수와 password_verify 함수가 그것인데요,
password_hash 함수는 암호화 할때 password_verify 함수는 복호화 할때 사용합니다
다만, 이 함수는 php 버번 5.3.7 이상일 경우에 한해서 사용이 가능합니다.
그 이하 버전에서 사용하고자 할 경우에는 별도로 include 해줘야 합니다
<?
include "./password.php";
?>
include 할 파일은 아래에 링크를 걸어두었습니다.
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))
반응형