0

と を使用しようとしていpassrord_hash()ますpassword_verify()。以下のコードは完璧に機能します。

$timeTarget = 0.2; 
$pass = "";
$cost = 9;
do {
$cost++;
$start = microtime(true);
$pass = password_hash("qwerty", PASSWORD_BCRYPT, ["cost" => $cost]);
    $end = microtime(true);
} while (($end - $start) < $timeTarget);

echo "Appropriate Cost Found: " . $cost . "\n";
echo $pass;


$hash = $pass;

if (password_verify('qwerty', $hash)) {
    echo 'Password is valid!';
} else {
    echo 'Invalid password.';
}

しかし、それを関数に変換すると、無効なパスワードが表示されます。関数で渡す値をエコーし​​ました。正しい値を示しています。しかし、結果は間違っています。コードの何が問題なのか理解できません

$str = "qwerty";

$enc = encrypt($str);

verify_string($str, $enc);



function encrypt($pass){
$timeTarget = 0.2; 
$cost = 9;
do {
    $cost++;
    $start = microtime(true);
    $pass = password_hash($pass, PASSWORD_BCRYPT, ["cost" => $cost]);
    $end = microtime(true);
} while (($end - $start) < $timeTarget);


echo $pass."<br />";
return $pass;
}

function verify_string($str, $enc){
echo $str." :  ".$enc."<br />";

if (password_verify($str, $enc)) {
    echo 'Password is valid!<br />';
}
    else {
    echo 'Invalid password.<br />';
}
}

助けてください

4

1 に答える 1

1

1. ループはパスワードの const 値を使用します

$pass = password_hash("qwerty", PASSWORD_BCRYPT, ["cost" => $cost]);

2. ループは変数 $pass を使用し、変数 $pass に変数を入れます。2 番目の円変数 $pass にはハッシュが含まれていますが、パスワードは含まれていません。

$pass = password_hash($pass, PASSWORD_BCRYPT, ["cost" => $cost]);
于 2014-05-21T07:10:59.840 に答える