728x90
⚠️ 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 |