2017-12-17 24 views
3

나는 사용자 데이터베이스에 저장하기 전에 암호 해시를 시도하고, 그래서 코드를 실행은 임의의 변수를 반환하는 것 데이터베이스에 저장된 $ wAJr0Z1spRtOcK4cLhIkguUCKgwZKYrwm.nRhm6AtCfDH8ri7ylJu. $ (2Y) $ $ 10 cayCQDSQ6pCICSozuIgBNu9uIopIoT5R6Y7aHXG6wx4v/oKx.Ipsepassword_hash는

이 그냥 무작위 말 : 내가 로그인을 시도 할 때 이제 암호로 넣어 같은 문자열은 완전히 다른 $의 hashedPass를 준다? 대신 사용해야하는 것이 있습니까?

+2

'password_verify'입니다. – tkausl

+0

완전을 위해 [passoword_verify] (http://php.net/manual/en/function.password-verify.php)에 대한 링크 : http://php.net/manual/en/function.password-verify. php – Jeff

+0

결과 및 사용 방법은 함수 매뉴얼의 반환 값에 나와 있습니다 : http://php.net/manual/en/function.password-hash.php#refsect1-function.password-hash- returnvalues ​​ – fyrye

답변

4

이것은 예상되는 동작입니다. password_hash은 해시를 생성하기 위해 일반 텍스트 암호와 함께 사용되는 소금을 생성합니다. 소금은 무작위로 생성되므로 password_hash에 전화 할 때마다 출력이 달라집니다.

비밀번호를 확인하려면 password_verify을 사용하십시오.

http://php.net/manual/en/function.password-verify.php

password_verify는 평문 패스워드를 검증하는 데 필요한 모든 정보

해시 그 자체에 포함되어있다.

$2y$10$wAJr0Z1spRtOcK4cLhIkguUCKgwZKYrwm.nRhm6AtCfDH8ri7ylJu 
  • $ 2Y $을이 접두사는 이것이 bcrypt 해시
  • 10이가되어 있음을 나타냅니다 : 해시의 해부학은 사용자가 제공 한 암호 해시를 들어, 사용 된 알고리즘에 따라 달라집니다 선정 된 파라미터
  • wAJr0Z1spRtOcK4cLhIkgu 제 22 문자 염
  • 인에게 UCKgwZKYrwm.nRhm6AtCfDH8 ri7ylJu 나머지 31 자 해시

https://en.wikipedia.org/wiki/Bcrypt

+1

완전성에 대한주의 사항 : 랜덤 소금과 몇 가지 다른 데이터가 해시 된 데이터에 접두어로 붙어 있으므로 'password_verify'가 비교를 위해 동일한 해시를 생성 할 수 있습니다. – zaph

+0

해시 된 암호로 두 매개 변수 모두에서 password_verify를 실행할 수 있습니까? php.net의 예제에서 암호 중 하나만 해시되었습니다. –

+0

오 기다려주십시오. . . 암호가 저장되지 않으면 해시 할 이유가 없다는 것을 알았습니다. 죄송합니다 –