2012-07-31 5 views
0

인터넷에서 bcrypt에 대해 다음 함수를 사용했습니다. 그것은 내가 찾고있는 암호 인 bycrypted 암호를 출력합니다. 또한 소금을 사용하여 검사를 수행하는 기능을했지만이 기능은 소금을 제공하지 않습니다.PHP bcrypt 해시 저장 소금

function bcrypt_hash($password, $work_factor = 8) 
{ 
    if (version_compare(PHP_VERSION, '5.3') < 0) throw new Exception('Bcrypt requires PHP 5.3 or above'); 

    if (! function_exists('openssl_random_pseudo_bytes')) { 
     throw new Exception('Bcrypt requires openssl PHP extension'); 
    } 

    if ($work_factor < 4 || $work_factor > 31) $work_factor = 8; 
    $salt = 
     '$2a$' . str_pad($work_factor, 2, '0', STR_PAD_LEFT) . '$' . 
     substr(
      strtr(base64_encode(openssl_random_pseudo_bytes(16)), '+', '.'), 
      0, 22 
     ) 
    ; 
    return crypt($password, $salt); 
} 

암호와 소금을 별도로 반환해야합니다. 또는이 기능을 별도로 분리 할 수있는 방법이 있습니다.

+1

왜 당신이 그 (것)들을 분리 필요합니까를? 하나의 문자열에 함께 연결하여 저장할 수 있습니다. 이 경우 항상 첫 번째 또는 마지막 X 문자가 소금입니다. 여러 DB 필드 나 함수 반환 값이 필요 없습니다. – feeela

+0

@feeela 호기심 많은 이야기. 그것이 암호 필드에 필요한 모든 것이라면 사용자가 로그인 할 때 어떻게 확인합니까? –

+0

snipplr에 이러한 함수를 게시했습니다. 나는 당신이 아이디어를 얻을 것이라고 생각 : http://snipplr.com/view/66454/passwordhash--generate-salted-passwords/ – feeela

답변

2

당신은 함수에서 여러 값을 반환 할 수는 없지만 여러 값을 포함하는 하나의 데이터 구조를 반환 할 수 있습니다

return array('crypt' => crypt($password, $salt), 'salt' => $salt); 
관련 문제