2013-08-15 2 views
0

Что я использую для проверкиВ противном случае проверить Crypt Password

// username and password sent from form 
$myusername= filter_var($_POST['myusername'], FILTER_SANITIZE_STRING); 
$mypassword= filter_var($_POST['mypassword'], FILTER_SANITIZE_STRING); 

$sql = $dbh->prepare("SELECT * FROM $tblname WHERE UserLogin='$myusername'"); 
$sql->execute(); 
$sql = $sql->fetch(); 

$password_hash = $sql['UserPass']; 

/*** close the database connection ***/ 
$dbh = null; 

if(crypt($mypassword, $password_hash) == $password_hash){ 

Что я использую для создания пароля

$salt = blowfishSalt(); 
$mypassword = crypt($mypassword, $salt); 

$stmt = $dbh->prepare('INSERT INTO Users(UserLogin, UserPass, UserEmail, admin) VALUES(:UserLogin, :UserPass, :UserEmail, :admin)'); 
$stmt->execute(array(
    ':UserLogin' => $myusername, 
    ':UserPass' => $mypassword, 
    ':UserEmail' => $myemail, 
    ':admin'  => $admin 
)); 

blowfishSalt()

function blowfishSalt($cost = 13) { 
    if (!is_numeric($cost) || $cost < 4 || $cost > 31) { 
     throw new Exception("cost parameter must be between 4 and 31"); 
    } 
    $rand = array(); 
    for ($i = 0; $i < 8; $i += 1) { 
     $rand[] = pack('S', mt_rand(0, 0xffff)); 
    } 
    $rand[] = substr(microtime(), 2, 6); 
    $rand = sha1(implode('', $rand), true); 
    $salt = '$2a$' . sprintf('%02d', $cost) . '$'; 
    $salt .= strtr(substr(base64_encode($rand), 0, 22), array('+' => '.')); 
    return $salt; 
} 

пришлось удалить { } для функции, чтобы она корректно форматировалась в stackoverflow. Я также сохраняю пароль в базе данных mysql с char (128).

+1

Не называть 'filter_var'. Вместо этого используйте параметры, как вы это делали позже. – SLaks

+0

Я удалил filter_var и добавил параметр, все еще получая всегда ложную проверку. – user1552172

ответ

0

У вас есть это код подтверждения:

crypt($mypassword, $password_hash) 

И это код создания:

$mypassword = crypt($mypassword, $salt); 

Конечно они должны одновременно использовать $ мойпароль и $ соль?

+0

Я думал, что использование сохраненного хэша пароля с помощью crypt ($ mypassword, $ password_hash) вытащит соль из сохраненного хэша пароля. – user1552172

+0

Я не понимаю вашего комментария. Работает ли код, если вы делаете то, что я предлагаю? – markdwhite

+0

ну дерьмо, им идиот. Он работает. Большое спасибо. – user1552172

Смежные вопросы