안전한 패스워드 저장

안전한 패스워드 저장을 위해서는 단방향 해시 함수를 사용해야 한다. 단방향 해시 함수란 원본 메시지를 변환하여 암호화된 메시지를 만들수는 있지만 암호화된 메시지로는 원본 메시지를 구할 수 없는 것을 말한다.

그래서 PHP 에서는 단방향 해시 함수 password_hash 를 제공한다.

password_hash 함수 사용법(PHP 5.5 ~)

string password_hash ( string $password , integer $algo [, array $options ] )
$password = "패스워드";

const PASSWORD_COST = ['cost'=>12]; // cost 의 기본 값은 10

/* 암호화 */
$hash = password_hash($password , PASSWORD_DEFAULT, PASSWORD_COST);

echo $hash; // $2y$12$QjSH496pcT5CEbzjD/vtVeH03tfHKFy36d4J0Ltp3lRtee9HDxY3K

/* 패스워드 검증 */
if ( !password_verify($password , $hash) ) {
    throw new Exception('비밀번호가 일치하지 않습니다.'):
}

가중치(cost) 의 값을 높이면 높일수록 더욱더 강력하게 암호화가 가능합니다.

단. 수치가 높으면 높을수록 암호화를 하는 시간과 검증하는 시간이 늘어나겠지요? 하지만 로그인과 회원가입과 같은 케이스는 약간(3초~5초)의 시간이 걸려도 된다고 생각되기 때문에 저같은 경우에는 가중치를 12로 합니다.

그리고 참고로 같은 문자열이라도 password_hash() 를 사용하면 매번 암호화 할 때마다 값이 달라집니다.