2010-06-13 4 views
0

나는 학습 프로젝트로 PHP에서 로그인 스크립트를 함께 시도하고있다.PHP 보안 로그온 스크립트 - md5 해시가 이전 스크립트에서 데이터베이스에 쓴 해시와 일치하지 않습니까?

사용자 등록시 데이터베이스 쓰기 코드입니다. 이 두 값은 모두 데이터베이스에 기록됩니다.

$this->salt = md5(uniqid()); 
$this->password = md5($password.$salt); 

로그인하면 다음 기능이 실행됩니다.

불행히도 내 코드를 단계별로 실행하면 두 값이 같지 않습니다. 누군가 제가 왜 이해하는지 도울 수 있습니까?

+0

$ publicSalt 데이터베이스에서 사용자의 소금이며, 올바른 사용해야합니까? 암호의 md5를 생성 할 때'$ this-> salt = md5 (uniqid()); –

+0

두 번째 블록에서 $ storedPassword와 $ actualPassword의 차이는 오타 일뿐입니다? –

+0

예, 맞습니다. –

답변

5

코드에있는 문제는 $salt 변수가 정의되지 않았으므로 비어 있다고 생각합니다. 당신은 $this->salt

변경

$this->password = md5($password.$salt); 

$this->password = md5($password.$this->salt); 
+0

당신은 아마 정확하게 맞을 것입니다. 이 종류의 비틀 거림은 정확하게 객체 지향 접근 방식을 채택하기로 결정한 이유입니다. 나는 스크립팅에 익숙하지만 기능적 프로그래밍과 OO 프로그래밍은별로 .... –

1

일부 기본 echo 문으로 해시되기 전에 원시 값을 비교합니다. 소금이 잘못되었거나 암호가 잘못되었거나 해시가 어떻게 든 엉망이되었습니다.