2012-07-18 2 views
0

인증 시스템을 위해 Blowfish로 전환하려고합니다. 나를 감싸 라. 나는 암호 학자가 아니며, 블로우 피어에 대한 나의 이해는 아직 그리 많지 않다.기존 인증 시스템이있는 Bycript/Blowfish 및 소금

현재 설정은 sha1과 소금을 사용합니다. 소금은 각 사용자에 대해 생성되고 데이터베이스에 저장됩니다. 그것은이 아래로 비등 :

$salt = $this->getSalt($username); 
$hash = sha1($password . $salt); 
if ($hash == $hashInDB) 
{ 
    // user is authenticated, set session id etc ... 
} 

getSalt() 방법은 지정된 사용자에 대한 데이터베이스에 저장된 소금을 가져옵니다.

가 지금은 납골당에 나는 일을해야 제대로 모든 것을 이해한다면 :

$salt = '$2a$07$' . $this->getSalt($username) . '$'; 
$hash = crypt($password, $salt); 

if ($hash == crypt($password, $saltInDB)) 
{ 
    // The user is authenticated, set session id etc.. 
} 

두 번째 예를 들어, $saltInDB 변수를 명확히하기 위해,`$ (2A) $ 07 $의 arandomsaltcreatedatregistration의 $ '와 같은 값이다.

  • 맞나요?

답변

0

예제가 정확합니다. 당신이 crypt() 기능 해시를 만들 때

, 당신이 사용 된 매개 변수 (알고리즘, 비용, 소금) 생성 된 해시의 일부가 된 것을 볼 수있을 것이다합니다 (해시의 시작) :

$2a$07$LCzy1mE0b9lS8Uyx9HEeUgHm8zH1iDDZ5... 

그 의미는 $saltInDB$hashInDB으로 바꿀 수 있습니다. crypt() 함수는 필요한 매개 변수를 $hashInDB에서 자동으로 추출합니다. 또한 소금 저장에 관한 질문에 대답하고 해시 값을 데이터베이스에 저장하면 소금이 거기에 포함됩니다. 그리고 네, 각 암호마다 새로운 소금을 만들어야합니다.

소금 후 '$'는 필요하지 않습니다.

bcrypt-hash를 생성하는 방법에 대한 자세한 내용은 here을 찾을 수 있습니다. 잘 설정된 라이브러리를 찾고 있다면 phpass을 권장 할 수 있습니다.