본문 바로가기

개발/PHP

비밀번호 암호화 password_hash

반응형


해킹등의 이유로 내 정보가 유출 됐을 때 비밀번호가 암호화 되어 있으면 그래도 그나마 안전할 수 있습니다.

여러 사이트의 아이디와 비밀번호가 같은경우 특히 더 그렇죠.


PHP에서 이를 편하게 지원 해 주는 함수가 있습니다.

바로 password_hash 함수.


PHP 버전 5.5.0 부터 사용 가능합니다.


사용방법 :

$password = 'playon';
echo $password = password_hash($password, PASSWORD_DEFAULT);

// 결과 :
$2y$10$5ABGrsi0B02c/erjBBnioeQfZUjyhaS.mPKHjVlNahfMOr.FQwWuy


이렇게 사용하면 됩니다.

첫번째 값에는 암호화 할 비밀번호, 두번째는 알고리즘 옵션입니다.

세번째 값도 들어갈 수 있는데 salt와 cost(기본값10)를 넣을 수 있습니다. (salt는 PHP7 버전에서 deprecated 됐으니 사용 노노)


🔑 PASSWORD_DEFAULT

bcrypt 알고리즘을 사용하십시오 (PHP 5.5.0 현재 기본값). 이 상수는 새롭고 강력한 알고리즘이 PHP에 추가되면서 시간이 지남에 따라 변경되도록 설계되었습니다. 따라서이 식별자를 사용하여 얻은 결과의 길이는 시간이 지남에 따라 변경 될 수 있습니다. 따라서 60자를 초과 할 수있는 데이터베이스 열에 결과를 저장하는 것이 좋습니다 (255자를 선택하는 것이 좋음).


🔑 PASSWORD_BCRYPT

CRYPT_BLOWFISH알고리즘을 사용하여 해시를 만듭니다. 그러면 "$2y$"식별자를 사용하여 표준 crypt () 호환 해시 가 생성됩니다 . 결과는 항상 60 자 문자열이되며 실패시 FALSE를 반환합니다.


위에 설명에도 있지만 결과값이 60자이기 때문에 필드 길이를 최소 60은 해줘야 합니다. 255자를 추천한다고 하네요.


세번째 값을 넣지 않으면 salt 값이 랜덤하게 자동으로 들어가져 비밀번호가 같아도 함수를 실행할 때마다 다른 결과 값을 출력합니다.

$password = 'playon';
echo $password = password_hash($password, PASSWORD_DEFAULT);
echo $password = password_hash($password, PASSWORD_DEFAULT);
echo $password = password_hash($password, PASSWORD_DEFAULT);

// 결과 :
$2y$10$Ri1PkmKxWMa4IAY5bemuQupwH7EQraD6h7vpMAjLCVjjuJgjNfAKy
$2y$10$bW5z6O/1dXWw8YpLhFqdzO5MqLjBnCPFp9GfdK0jMt9XGqWpRAtEq
$2y$10$M9QeUsn2z/4vPLMiYYfa8ukxywSdpvzKadSPYs9eIzMPGupqp0W.u

이렇게요.


이렇게 나온 값을 저장하면 됩니다.

값이 매번 달라지면 로그인이 필요한 경우에 입력된 비밀번호와 암호화 된 비밀번호를 비교 할 수 없겠죠?

나는 tistory 이라고 입력하고 로그인해야 하는데 password_hash를 들어갔다 나오면 값이 달라지니까요.


이럴때 비교할 수 있는 password_verity 함수가 있습니다. 다음에 글 써 볼게요.



password_hash 의 자세한 내용은

http://php.net/manual/kr/function.password-hash.php 에서 확인 가능합니다.




반응형

'개발 > PHP' 카테고리의 다른 글

PHP setCookie 사용법(보안, secure, httponly)  (0) 2022.11.10
Google reCAPTCHA v3 적용하기  (1) 2019.07.04
define(): 상수의 정의  (0) 2019.06.05
비밀번호 암호화 확인 password_verity  (1) 2018.10.26
PHP 에러를 표시하기  (0) 2017.06.12