0

インターネットから 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);
}

パスワードとソルトの返却は別途必要です。または、この関数から個別に引き出す方法があります。

4

1 に答える 1

2

関数から複数の値を返すことはできませんが、複数の値を含む単一のデータ構造を返すことはできます。

return array('crypt' => crypt($password, $salt), 'salt' => $salt);
于 2012-07-31T16:48:59.117 に答える