이전 글은 password_hash에 대해 썼다
암호화를 하고 복호화를 쓰는 것이기 때문에 암호화하는 법을 알아야 한다면 가보자
https://code-onetool.tistory.com/73
password_hash 찍먹하기
회원가입 로그인을 하고 있는 찰나 회원가입에 password_hash을 넣어 db에 넣는것은 잘 되어 있는 것을 확인 했다 이제 password_verify을 사용해 로그인을 하면 된다고 했지만 나는 되지 않았다 왜 안 되
code-onetool.tistory.com
아주 간단하게 예를 들면 이렇게 된다
$userPassword은 사용자가 입력 받은 것
$hashedPassword은 해시값 그렇니까 회원가입할 때 해시해서 넣은 것 이라고 생각하면 편하다
이번에도 password_verify을 공식 홈페이지에서 정리해 보았다
https://www.php.net/manual/en/function.password-verify.php
PHP: password_verify - Manual
This is a simplified example; it is recommended to rehash a correct password if necessary; see password_needs_rehash() for an example. The above example will output:
www.php.net
비밀번호를 복호화하는 것인지 알았는데 그게 아니었다
비밀번호가 해시와 일치하는지 확인하는 메소드인가보다
Password_verify
Password_verify — 비밀번호가 해시와 일치하는지 확인합니다.
설명 ¶
password_verify(string $password, string $hash): bool
주어진 해시가 주어진 비밀번호와 일치하는지 확인하는 것이라고 한다
Password_verify()는 crypt() 와 호환됩니다 .
따라서 crypt() 로 생성된 비밀번호 해시는 Password_verify() 와 함께 사용할 수 있습니다 .
Password_hash()는 반환 된 해시의 일부로 알고리즘, 비용 및 소금을 반환합니다.
따라서 해시를 확인하는 데 필요한 모든 정보가 여기에 포함됩니다.
이를 통해 검증 기능은 솔트나 알고리즘 정보를 별도로 저장할 필요 없이 해시를 검증할 수 있습니다.
이 함수는 타이밍 공격으로부터 안전합니다.
password_verify
이 함수는 두개의 매개변수를 받는다
1. 사용자가 입력한 비밀번호 Ex : 1111
2. 데이터 베이스에 저장된 해시된 비밀번호
이 함수는 두 비밀번호가 일치하는지 검사해서 만약 일치한다면 true를 일치하지 않는다면 false를 반환합니다
// 사용자가 입력한 비밀번호
$userPasswordInput = '1111';
// 데이터베이스에서 조회한 해시된 비밀번호
$hashedPasswordFromDatabase = '$2y$10$e0MDJHfNX4jspQkacFAOEO/q1B2jzB1O.L3jTqJ.V.kSd3sP9kk3e';
// 비밀번호 검증
if (password_verify($userPasswordInput, $hashedPasswordFromDatabase)) {
// 검증 성공: 사용자가 입력한 비밀번호와 해시된 비밀번호가 일치
echo "로그인 성공!";
} else {
// 검증 실패: 비밀번호가 일치하지 않음
echo "로그인 실패: 비밀번호가 올바르지 않습니다.";
}
매개변수 ¶
password
사용자의 비밀번호입니다.
hash
Password_hash() 에 의해 생성된 해시입니다 .
반환값 ¶
true비밀번호와 해시가 일치하는지 여부를 반환합니다 false.
예제 #1 비밀번호_확인() 예제
이는 단순화된 예입니다. 필요한 경우 올바른 비밀번호를 다시 해시하는 것이 좋습니다. 예제는 비밀번호_needs_rehash()를 참조하세요 .
<?php
// See the password_hash() example to see where this came from.
$hash = '$2y$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a';
if (password_verify('rasmuslerdorf', $hash)) {
echo 'Password is valid!';
} else {
echo 'Invalid password.';
}
?>
위의 예는 다음과 같이 출력됩니다.
비밀번호가 유효합니다!