0

これこれを使用してパスワードハッシュスクリプトを作成しました。暗号化関数がハッシュを「*0」として提供する場合を除いて、正しく機能するようになっていますが、失敗します。

PHPコード

    $password='password';
    $salt = '$2y$07$';
    $salt .= base64_encode(mcrypt_create_iv(16, MCRYPT_DEV_RANDOM));
    $salt .='$$';
    $password_hash = crypt($password, $salt)';

    echo $password_hash.'<br />';

上記を使用して、私は次のように値を取得しています

    $salt = '$2y$07$8K3i8rJ7n7bsJA36CfbabQ==$$';
    $crypt_password = $password_hash;
    $crypt_password = '$2y$07$8K3i8rJ7n7bsJA36CfbabO9ojj2hl61azl8CubJQhRTgla4ICiCVC';
    if (crypt($password,$crypt_password)===$crypt_password)
    {
    echo 'password verified';
    }
    else{
    echo 'password NOT verified';
    }

それを正しく機能させるための可能な方法を見て、提案してください。

ありがとう。

4

1 に答える 1

3

問題は、関数base64_encodeによって誤ったソルトと見なされる「+」記号の文字列を生成する可能性があることcryptです。

var_dumpあなた$saltと一緒に$password、そしてあなたは文字がソルトで使われるたび+に、crypt関数が文字列を返すのを見るでしょう'*0'-失敗のサイン。

それを解決する1つの可能な方法は、すべての「+」記号を「。」に置き換えることです。

$salt = str_replace('+', '.', $salt);
于 2012-10-15T15:47:58.167 に答える