[PHP] 비밀번호 암호화 저장, 비교하기

2022. 10. 24. 09:00·Language/PHP
⚠️ 2021.06.15에 작성된 글입니다 ⚠️

 

 

※ php 7.4 버전 기준 작성 ※

구현 기능

  • 비밀번호 암호화하여 저장하기 (eg. 회원가입)
  • 비밀번호와 입력값 비교하기 (eg. 로그인)

 


비밀번호 암호화 하기

비밀번호를 암호화할 때에는 아래의 함수를 사용한다.

password_hash(string $password, mixed $algorithm, array $options = ?) : string|false

    $password: 암호화할 비밀번호

    $algorithm: 암호화 알고리즘

    $options: 암호화할 때의 옵션. salt, cost, memory_cost, time_cost, threads

 

단방향 암호화해주는 해시함수이다.

즉, 암호화(평문->암호문)는 가능하지만 복호화(암호문->평문)가 불가능하다.

성공적으로 암호화할 경우 암호화한 문자열을 리턴하고, 암호화 실패 시 false를 리턴한다.

 

지원되는 알고리즘은 네가지이다.

  • PASSWORD_DEFAULT
    패스워드 저장을 목적으로 만들어진 bcrypt 알고리즘 사용. DB 저장 시 60자 이상의 문자열 담을 수 있게 할 것. 255자 추천.
  • PASSWORD_BCRYPT
    CRYPT_BLOWFISH 알고리즘 사용. 60자 길이의 문자열로 암호화.
  • PASSWORD_ARGON2I
    Argon2i 해싱 알고리즘 사용. Argon2를 지원하는 PHP만 사용 가능.(PHP 7.2.0 이상)
  • PASSWORD_ARGON2ID
    Argon2id 해싱 알고리즘 사용. Argon2를 지원하는 PHP만 사용 가능.(PHP 7.3.0 이상)
$password = "Win's new password";
$hased_password = password_hash($password, PASSWORD_DEFAULT);

echo $password; // $2y$10$75fPh6gkdkrWK/P7TWhNtebbdIu9FTdSeXrpnGfLGzAS/QRJVRPyG

 

비밀번호와 입력값 비교하기

비밀번호를 검증할 때에는 아래 함수를 사용한다.

password_verify(string $password, string $hash) : bool

    $password: 입력값

    $hash: 암호화된 비밀번호

 

암호화된 비밀번호를 복호화할 수 없기 때문에 복호화한 비밀번호와 입력값을 비교하는 것은 불가능하다.

따라서 암호화된 비밀번호와 입력값을 비교하는 함수 password_verify()를 사용한다.

두 값이 일치하면 true를, 불일치하면 false를 리턴한다.

$hash = "$2y$10$75fPh6gkdkrWK/P7TWhNtebbdIu9FTdSeXrpnGfLGzAS/QRJVRPyG";
$input = "input password";

$is_match = password_verify($input, $hash);

if ($is_match) {
	// 비밀번호 맞았을 때 동작
} else {
	// 비밀번호 틀렸을 때 동작
}
728x90
저작자표시 비영리 변경금지 (새창열림)

'Language > PHP' 카테고리의 다른 글

[PHP] Enum 사용하기  (0) 2022.10.24
[PHP] 에러 표시하기  (0) 2022.10.24
'Language/PHP' 카테고리의 다른 글
  • [PHP] Enum 사용하기
  • [PHP] 에러 표시하기
Wintinue
Wintinue
201 Created!
  • Wintinue
    Win Record
    Wintinue
    • 📘 Post (68)
      • Android (32)
      • Nest.js (1)
      • NGINX (1)
      • Error (10)
      • AWS (1)
      • Git (3)
      • IT용어 (4)
      • CMD (2)
      • Language (5)
        • PHP (3)
        • Java (2)
      • Project (5)
        • 개인 프로젝트 (3)
        • 팀 프로젝트 (2)
  • 링크

    • Github
  • 전체
    오늘
    어제
  • hELLO· Designed By정상우.v4.10.3
Wintinue
[PHP] 비밀번호 암호화 저장, 비교하기
상단으로

티스토리툴바