본문 바로가기

카테고리 없음

password_verify 찍먹하기

이전 글은 password_hash에 대해 썼다 

암호화를 하고 복호화를 쓰는 것이기 때문에 암호화하는 법을 알아야 한다면 가보자 

https://code-onetool.tistory.com/73

 

password_hash 찍먹하기

회원가입 로그인을 하고 있는 찰나 회원가입에 password_hash을 넣어 db에 넣는것은 잘 되어 있는 것을 확인 했다 이제 password_verify을 사용해 로그인을 하면 된다고 했지만 나는 되지 않았다 왜 안 되

code-onetool.tistory.com

 

 

아주 간단하게 예를 들면 이렇게 된다 

$userPassword은 사용자가 입력 받은 것 

$hashedPassword은 해시값 그렇니까 회원가입할 때 해시해서 넣은 것 이라고 생각하면 편하다 

 

    $userPassword = $_POST['password'];
    $hashedPassword = '$2y$10$B1ybiCIuv8k13ErqSogkdORDKJKK15xFVKVEAWNq7x0TG6SNThf2u'; // test
   
    if(password_verify($userPassword, $hashedPassword)){
        echo "Correct";
    }
    else{
        echo "Fail";
    }

 

 

 

 


 

이번에도 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 , 문자열 $hash ): 부울
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.';
}
?>

위의 예는 다음과 같이 출력됩니다.

비밀번호가 유효합니다!