2017-09-07 3 views
1

미리 저장된 해시에 대한 비밀번호의 유효성을 검사하는 데 password_verify를 사용할 수 있다는 것을 알고 있습니다. 또한 password_hash는 PASSWORD_ACTUAL 또는 PASSWORD_BCRYPT과 같은 해시 알고리즘을 선택해야한다는 사실을 알고 있습니다.php의 password_verify 및 password_hash

password_verify($pass, $hash)$pass을 해시로 변환하면 사용할 알고리즘을 어떻게 알 수 있습니까?

+0

어디에서 'PASSWORD_ACTUAL'을 찾았습니까? 나는 그 문서를 보지 못했다. –

+0

@ Don'tPanic 그는 아마도'PASSWORD_DEFAULT'를 의미했습니다 – ishegg

+1

@ishegg 그래, 아마도 그럴 것 같지만, 내가 새로운 것을 배울 수 있을지 모르겠다면 물어보기를 원할뿐입니다. –

답변

5

해시 자체에 필요한 정보가 있기 때문에 알 수 있습니다. PHP 문서 당

:

참고 password_hash()는 반환 된 해시의 일환으로 알고리즘, 비용과 소금을 반환합니다. 따라서 해시를 확인하는 데 필요한 모든 정보가 포함되어 있습니다. 이것은 검증 함수가 소금이나 알고리즘 정보를위한 별도의 저장소를 필요로하지 않고도 해시를 검증 할 수있게합니다.

예를 들어 Reference

하는 PASSWORD_BCRYPT 해시는 다음과 같이 보일 것이다 :
  • A1

    $2a$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy 
    |-----|----------------------|------------------------------| 
    A1,A2   B       C 
    
    : 2a는 해시 알고리즘을 나타냅니다. Bcrypt의 경우 2a, 2b 또는 2y
  • A2 : 은 해시의 비용 매개 변수입니다. 그냥 "작업"을 늘리려면이 수를 늘릴 수 있기 때문에 이것은 타이밍 공격에 대한 해시 안전하게이
  • B를 계산하기 위해 필요한이는 128 비트 소금
  • C입니다 : 결과 184 비트 해시

모든 매개 변수 (현재는 a1 만 보임)를 통해 이미 알고리즘을 알 수 있습니다.

+0

"algorithm, cost and salt"가 해시 문자열의 일부로 반환 되었습니까? –

+0

예. 내 편집을 참조하십시오. – ishegg

+0

삭제되었습니다. 고맙습니다 :) –

0

PASSWORD_BCRYPT를 사용하여 생성 된 해시는 $ 2y $의 식별자를 가지고 있으며 해시 길이가 60 자임을 확인합니다. password_verify()는 이들 중 하나 또는 둘 모두를 조사하여 사용할 해시의 종류를 결정합니다.

관련 문제