안전한 패스워드 저장
안전한 패스워드 저장을 위해서는 단방향 해시 함수를 사용해야 한다. 단방향 해시 함수란 원본 메시지를 변환하여 암호화된 메시지를 만들수는 있지만 암호화된 메시지로는 원본 메시지를 구할 수 없는 것을 말한다.
그래서 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() 를 사용하면 매번 암호화 할 때마다 값이 달라집니다.
'PHP' 카테고리의 다른 글
[PHP] Laravel 5, Custom Exception 사용하기 (1) | 2017.02.12 |
---|---|
[PHP]라인 봇(LINE BOT) 사용을 위한 Webhook 기능 사용하기 (0) | 2016.11.16 |
[PHP] v5.6 에서 mcrypt_encrypt() 함수 사용 시 발생하는 에러 해결 방법. (0) | 2016.02.24 |
[PHP] CURL로 첨부파일 포워딩(forwarding) 하기 (0) | 2016.01.20 |
[PHP] 세션(session) 타임아웃(timeout) 설정하기 "php.ini" (0) | 2015.12.10 |