Password_hash() 함수는 비밀번호의 해시를 생성하는 데 사용됩니다.
PHP 버전 요구 사항: PHP 5 >= 5.5.0, PHP 7
문자열 비밀번호_해시( 문자열 $password , int $algo [, 배열 $options ] )
Password_hash()는 충분히 강력한 단방향 해싱 알고리즘을 사용하여 비밀번호의 해시를 생성합니다. Password_hash()는 crypt()와 호환됩니다. 따라서 crypt()로 생성된 비밀번호 해시는 비밀번호 해시()와 함께 사용할 수도 있습니다.
현재 지원되는 알고리즘:
PASSWORD_DEFAULT
- bcrypt 알고리즘을 사용합니다(PHP 5.5.0의 기본값). 이 상수는 PHP가 더 새롭고 강력한 알고리즘을 추가함에 따라 변경된다는 점에 유의하세요. 따라서 이 상수를 사용하여 생성된 결과의 길이는 향후 변경됩니다. 따라서 결과가 저장되는 데이터베이스의 열은 60자를 초과할 수 있습니다(255자 권장).
PASSWORD_BCRYPT
- CRYPT_BLOWFISH
알고리즘을 사용하여 해시를 생성합니다. 결과적으로 "$2y$"와 호환되는 crypt()가 생성됩니다. 결과는 60자 문자열이 되고, 실패하면 FALSE
됩니다.
PASSWORD_ARGON2I
- Argon2 해싱 알고리즘을 사용하여 해시를 생성합니다.
PASSWORD_BCRYPT에서 지원되는 옵션:
salt(string) - 비밀번호 해싱을 위한 솔트 값을 수동으로 제공합니다. 이렇게 하면 자동 소금 생성이 방지됩니다.
이 값을 생략하면 비밀번호 해시()는 각 비밀번호 해시에 대해 임의의 솔트 값을 자동으로 생성합니다. 이 작동 모드는 의도적인 것입니다.
참고: PHP 7.0.0부터 salt 옵션은 더 이상 사용되지 않습니다. 지금은 기본으로 생성된 솔트를 사용하는 것이 더 좋습니다.
비용(정수) - 알고리즘에서 사용되는 비용을 나타냅니다. crypt() 페이지에 비용 값의 예가 있습니다.
생략하면 기본값은 10입니다. 이 비용은 수익성이 좋지만 자체 하드웨어에 따라 이 값을 늘릴 수 있습니다.
PASSWORD_ARGON2I 지원 옵션:
memory_cost ( 정수 ) - Argon2 해시를 계산할 때 최대 메모리(단위: 바이트)입니다. 기본값: PASSWORD_ARGON2_DEFAULT_MEMORY_COST
.
time_cost ( 정수 ) – Argon2 해시를 계산하는 데 소요된 최대 시간입니다. 기본값: PASSWORD_ARGON2_DEFAULT_TIME_COST
.
스레드 ( 정수 ) – Argon2 해시를 계산할 때 사용할 최대 스레드 수입니다. 기본값: PASSWORD_ARGON2_DEFAULT_THREADS
.
매개변수 설명:
비밀번호:password_hash()에 의해 생성된 해시 값입니다.
algo: 비밀번호를 해싱할 때 사용되는 알고리즘을 나타내는 데 사용되는 암호화 알고리즘 상수입니다.
옵션: 옵션을 포함하는 연관 배열입니다. 현재 두 가지 옵션이 지원됩니다: salt, 비밀번호를 해싱할 때 추가되는 salt(간섭 문자열) 및 알고리즘 재귀 수준 수를 지정하는 데 사용되는 비용. 이 두 값의 예는 crypt() 페이지에서 찾을 수 있습니다.
생략하면 임의의 솔트 값과 기본 비용이 사용됩니다.
해시된 비밀번호를 반환하거나 실패 시 FALSE를 반환합니다.
출력은 다음과 같습니다
$2년$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a
출력은 다음과 같습니다
$2년$12$QjSH496pcT5CEbzjD/vtVeH03tfHKFy36d4J0Ltp3lRtee9HDxY3K
소금 값을 수동으로 설정하는 예
<?php /* * * 여기의 솔트 값은 무작위로 생성된다는 점에 유의하세요. * 절대 고정된 솔트 값이나 무작위로 생성되지 않은 솔트 값을 사용하지 마세요. * * 대부분의 경우, Password_hash가 자동으로 임의의 솔트 값을 생성하도록 할 수 있습니다. */ $옵션 = [ ' 비용 ' => 11 , ' 소금 ' => mcrypt_create_iv ( 22 , MCRYPT_DEV_URANDOM ) , ] 에코 ; 비밀번호_해시 ( " rasmuslerdorf " , PASSWORD_BCRYPT , $options ) ? >출력은 다음과 같습니다
$2y$11$q5MkhSBtlsJcNEVsYh64a.aCluzHnGog7TQAKVmQwO9C8xb.t89F.
최적의 비용을 찾는 Password_hash() 예제
<?php /* * * 이 예는 서버에서 벤치마크 테스트를 수행하여 서버가 얼마나 높은 비용을 견딜 수 있는지 테스트합니다. * 서버 속도를 크게 저하시키지 않고 가장 높은 값을 설정할 수 있습니다. * 8~10이 좋은 결론입니다. 서버에서 충분히 빠르며 높을수록 좋습니다. * 다음 코드 대상은 50밀리초(milliseconds) 이하이며, * 대화형 로그인을 처리하는 시스템에 적합합니다. */ $timeTarget = 0.05 ; // 50 밀리초(밀리초) $ cost = 8 ; { $ cost ++ ; $ start = 마이크로 타임 ( true ) ; 비밀번호 _ 해시 ( " 테스트 " , PASSWORD_BCRYPT , [ " 비용 " = > $ cost ] ) ; ~하는 동안 ( ( $end - $start ) < $ timeTarget ) 에코 " 적절한 비용을 찾았 습니다 : " .출력은 다음과 같습니다
발견된 적정 비용: 10
Argon2를 사용한 예:
<?php 에코 ' Argon2 해시 : ' .password_hash ( ' rasmuslerdorf ' , PASSWORD_ARGON2I ) ;출력은 다음과 같습니다
Argon2 해시: $argon2i$v=19$m=1024,t=2,p=2$YzJBSzV4TUhkMzc3d3laeg$zqU/1IN0/AogfP4cmSJI1vc8lpXRW9/S0sYY2i2jHT0