PHP PDO от sha256 към bcrypt

d7p

Registered
Здравейте, искам да заменя sha256 и да премина към bcrypt кодиране на паролите в базата данни. Получава се донякъде, но не мога да направя да взима паролата от базата данни и да я сравнява с вече въведената при вход с pdo. Много ще съм благодарен, ако някой компетентен вземе присърце темата и драсне 2-3 реда код, за да се получи магията. : ))))

Използвам този код при регистрация:

Код:
   $newpass= password_hash($password, PASSWORD_BCRYPT, array("cost" => 12));

Това ми е вход функцията

Код:
public function Login($username, $password)
    {
        try {
            $db = DB();
            $query = $db->prepare("SELECT id FROM members WHERE username=:username AND password=:password");
            $query->bindParam("username", $username, PDO::PARAM_STR);
            $encpass= hash('sha256', $password);
            $query->bindParam("password", $encpass, PDO::PARAM_STR);
            $query->execute();
            if ($query->rowCount() > 0) {
                $result = $query->fetch(PDO::FETCH_OBJ);
                return $result->id;
            } else {
                return false;
            }
        } catch (PDOException $e) {
            exit($e->getMessage());
        }
    }
 
Първо се изкарваше паролата от базата данни и после се сверяваше с http://php.net/manual/en/function.password-verify.php до колкото си спомням.
 
Прав си приятел, използва се password_verify() за проверка на паролата, но опитвах доста пъти да я изкарам и все някакви грешки или не се логваше. Именно за това пуснах тема във форума, защото се мъча от ден и половина и резултатът е нулев.
 
Не се прави така.

Няма да можеш да конвертираш сегашните пароли към новия алгоритъм - имаш хешове, не оригиналните пароли.

Първо трябва да опиташ да ги логнеш със стария алгоритъм, ако е успешно, хешираш паролата с новия алгоритъм и запазваш в БД, иначе опитваш да ги логнеш с новия алгоритъм.

Или "джалатската": сменяш паролите на всички и оставяш потребителите сами да си я сменят.
 
Благодаря ти, идеята ще я имам впредвид. Но при мен проблема е, че съм все още начинаещ с PDO и не мога да направя така, че потребителите да влизат с bcrypt криптираната парола. Кода, който съм дал (login функцията) работи с sha256 криптиране, но той просто криптира паролата, а не я взима от базата данни и след това да я сравнява с password_verify. Опитах много пъти да изкарам паролата и след това да я сравня по-този начин:

Код:
$pass = password_verify("$passwrd", $hashedpassword);

Но не ми се получава явно обърквам повечето неща от кода.
 
Покажи и кода за регистрация, където хешираш. Също така провери колоната в базата дали length-a е достатъчен, за да събере хеша.

Ако паролите ти са с sha256 в момента в базата .. едва ли ще стане да ги верифицираш с $pass = password_verify("$passwrd", $hashedpassword);

предполагам си го видял това, но:

1. хешираш: http://php.net/manual/en/function.password-hash.php
2. верифицираш(сравняваш): http://php.net/manual/en/function.password-verify.php
 

Горе