PHP / 함수 / password_verify() / password_hash()로 만든 암호화된 문자열이 입력한 비밀번호와 같은지 확인하는 함수

개요

password_verify()는 password_hash()로 암호화한 비밀번호가 사용자가 입력한 값과 같은지 확인하는 함수입니다. 암호화된 문자열을 원래 문자열로 바꾸는 것이 아니고, 단지 같은지 다른지를 비교하여 TRUE 또는 FALSE를 반환합니다.

문법

password_verify ( string $password , string $hash )
  • $password : 사용자가 입력한 비밀번호입니다.
  • $hash : password_hash()로 암호화된 문자열입니다.

예제

password_hash() 함수로 mypw를 암호화하고 변수 encrypted_password에 저장합니다.

$encrypted_password = password_hash( 'mypw', PASSWORD_DEFAULT );

사용자가 입력한 암호를 변수 password로 받았다고 가정합니다.

$password = '123';

사용자가 입력한 암호 password와 암호화된 문자열 encrypted_password를 비교해서, 같다면 Success, 다르면 Fail을 출력합니다.

if ( password_verify( $password, $encrypted_password ) ) {
  echo "<h1>Success</h1>";
} else {
  echo "<h1>Fail</h1>";
}

다음은 사용자가 정확한 암호를 입력했을 때의 결과입니다.

<!doctype html>
<html lang="ko">
  <head>
    <meta charset="utf-8">
    <title>PHP</title>
    <style>
      body { 
        font-family: Consolas, monospace;
      }
    </style>
  </head>
  <body>
    <h1>password_verify</h1>
    <?php
      $encrypted_password = password_hash( 'mypw', PASSWORD_DEFAULT );
      echo '<p>password : mypw<br />encrypted_password ' . $encrypted_password . '</p>';
      $password = 'mypw';
      if ( password_verify( $password, $encrypted_password ) ) {
        echo "<h1>Success</h1>";
      } else {
        echo "<h1>Fail</h1>";
      }
    ?>
  </body>
</html>

다음은 사용자가 틀린 암호를 입력했을 때의 결과입니다.

<!doctype html>
<html lang="ko">
  <head>
    <meta charset="utf-8">
    <title>PHP</title>
    <style>
      body { 
        font-family: Consolas, monospace;
      }
    </style>
  </head>
  <body>
    <h1>password_verify</h1>
    <?php
      $encrypted_password = password_hash( 'mypw', PASSWORD_DEFAULT );
      echo '<p>password : mypw<br />encrypted_password ' . $encrypted_password . '</p>';
      $password = '123';
      if ( password_verify( $password, $encrypted_password ) ) {
        echo "<h1>Success</h1>";
      } else {
        echo "<h1>Fail</h1>";
      }
    ?>
  </body>
</html>

같은 카테고리의 다른 글
PHP / 함수 / password_hash() / 비밀번호 암호화하는 함수

PHP / 함수 / password_hash() / 비밀번호 암호화하는 함수

개요 password_hash()는 비밀번호를 암호화해주는 함수입니다. 입력한 값이 암호화된 비밀번호와 맞는지 확인하는 것은 password_verify() 함수로 합니다. 문법 password_hash ( string $password , int $algo ) $password 암호화할 문자열입니다. $algo 암호화 알고리즘을 정합니다. PASSWORD_DEFAULT : bcrypt 알고리즘을 사용합니다. PASSWORD_BCRYPT : CRYPT_BLOWFISH 알고리즘을 사용합니다. PASSWORD_ARGON2I : Argon2i hashing 알고리즘을 사용합니다. PHP를 Argon2를 사용할 수 있도록 설치한 경우에 사용 가능합니다. PASSWORD_ARGON2ID ...

PHP / 함수 / isset() - 설정된 변수인지 확인하는 함수

PHP / 함수 / isset() - 설정된 변수인지 확인하는 함수

개요 isset으로 변수가 설정되었는지 확인할 수 있습니다. PHP 4 이상에서 사용할 수 있습니다. 문법 isset( $var ); $var가 설정되었는지 확인하고, 설정되었으면 TRUE, 설정되지 않았으면 FALSE를 반환합니다. isset( $var1, $var2, ... ); $var1, $var2, …이 설정되었는지 확인합니다. 모든 변수가 설정되었으면 TRUE, 그렇지 않다면 FALSE를 반환합니다. 예제 <!doctype html> <html lang="ko"> <head> <meta charset="utf-8"> <title>Coding ...

PHP / 회원 관리 / 로그인 페이지, 로그인 완료 페이지

PHP / 회원 관리 / 로그인 페이지, 로그인 완료 페이지

로그인 페이지 - login.php 페이지를 열면 POST 방식으로 넘어온 username과 password를 저장합니다. $username에 값이 없다면 이후의 PHP 코드는 실행되지 않습니다. 양식에 값을 입력하고 로그인 버튼을 클릭하면 $username에 값이 있으므로 이후의 PHP 코드가 실행됩니다. $username에 값이 있다면 DB에서 username에 해당하는 password를 가져와서 $encrypted_password에 저장합니다. 일치하는 username이 존재하지 않는다면 $encrypted_password의 값이 없으므로 '사용자이름이 존재하지 않습니다.'를 출력합니다. 일치하는 username이 ...

PHP / 조건문 / switch

PHP / 조건문 / switch

switch는 하나의 변수를 여러 값과 비교할 때 유용한 조건문입니다. 문법 switch ( $var ) { case value1: statement1; break; case value2: statement2; break; ... default: statement3; } $var의 값을 value1과 비교하여 value1과 같으면 statement1을 실행하고 ...

PHP / 회원 관리 / 비밀번호 변경 페이지

PHP / 회원 관리 / 비밀번호 변경 페이지

change-password.php $_SESSION의 값으로 로그인 여부를 판단합니다. 로그인 상태가 아니라면 로그인 페이지로 이동합니다. 로그인 상태라면 $current_password의 값으로 새 비밀번호를 입력했는지 확인합니다. 새 비밀번호를 입력했다면 현재 비밀번호가 맞는지 확인합니다. 맞지 않다면 '현재 비밀번호가 틀렸습니다.'를 출력합니다. 현재 비밀번호가 맞다면 새로 입력한 비밀번호 두 개가 일치하는지 확인합니다.일치하지 않는다면 '새 비밀번호가 일치하지 않습니다.'를 출력합니다. 새 비밀번호 두 개가 ...

PHP / 두 날짜 사이의 기간(차이) 구하는 방법

PHP / 두 날짜 사이의 기간(차이) 구하는 방법

두 날짜 사이의 차이 구하기 시작하는 날짜를 변수에 담는다. $from = new DateTime( '2022-01-01' ); 끝나는 날짜를 변수에 담는다. $to = new DateTime( '2022-03-31' ); diff 또는 date_diff로 차이를 구한다. echo $from -> diff( $to ) -> days; echo date_diff( $from, $to ) -> days; 2022년 1월은 31일, 2월은 28일, 3월은 31일로 총 90일이다. 위의 방식으로 계산하면 89일이 ...

PHP / 파일 업로드 만들기

PHP / 파일 업로드 만들기

PHP로 파일 업로드 기능을 구현해본다. 다음은 파일을 업로드하기 위한 간단한 HTML 문서. <!doctype html> <html lang="ko"> <head> <meta charset="utf-8"> <title>PHP</title> </head> <body> <form action="" method="POST" enctype="multipart/form-data"> <p><input type="file" name="myfile"></p> <p><input type="submit" name="action" value="Upload"></p> </form> </body> </html> 파일을 업로드하면 $_FILES 번수에 배열로 name, type, size, ...

PHP / 현재 페이지의 URL 정보 가져오는 방법

PHP / 현재 페이지의 URL 정보 가져오는 방법

$_SERVER를 이용하여 현재 페이지의 URL 정보를 가져올 수 있다. $_SERVER : 도메인 $_SERVER : 도메인 다음 부분 $_SERVER : GET 방식으로 넘어온 값 $_SERVER : 도메인 다음 부분에서 GET 방식으로 넘어온 값 제외 basename( $_SERVER ) : 파일 이름 예를 들어 URL이 https://example.codingfactory.net/php/php.php?a=123&b=456라고 할 때, 결과는 다음과 ...

PHP / 연산자 / 논리 연산자

PHP / 연산자 / 논리 연산자

$a and $b $a와 $b가 모두 TRUE이면 TRUE를 반환합니다. $a or $b $a 또는 $b가 TRUE이면 TRUE를 반환합니다. 주의할 점은 둘 다 TRUE일 때도 TRUE라는 것입니다. 즉, 둘 다 FALSE일 때만 FALSE입니다. $a xor $b $a와 $b 중 하나만 TRUE일 때만 TRUE를 반환합니다. ! $a $a가 TRUE가 아니면 TRUE를 반환합니다. $a && $b $a와 $b가 모두 TRUE이면 TRUE를 반환합니다. $a ...

PHP / $_GET, $_POST - 양식(form)으로 전송된 데이터 받기

PHP / $_GET, $_POST - 양식(form)으로 전송된 데이터 받기

GET과 POST HTML의 form을 이용하여 값을 전송하는 방식은 get과 post 두 가지가 있습니다. PHP로 그 값을 받아서 사용하는 방법을 알아봅니다. GET 방식으로 전송한 경우 다음은 GET 방식으로 값을 전송하는 간단한 예제입니다. form.php <!doctype html> <html lang="ko"> <head> <meta charset="utf-8"> <title>HTML</title> <style> * { ...