2013-08-27 2 views
0

Я не думаю, что мое название подходит для моего вопроса. Мой вопрос: у меня есть система авторизации simle только для тестовых целей, и я использую sha1 для шифрования моего пароля в моей базе данных. который будет выглядеть такПолучение зашифрованного пароля sha1 ..

sha1($_POST['..some_variable...']) 

Какой бы лучший способ получить мой зашифрованный пароль в виде обычного текста для целей аутентификации. Как выбрать мое имя пользователя и пароль из моей базы данных.

+1

(Короче говоря, вы не -. SHA-1 является хэшем, а не схемы шифрования двухсторонней .) –

+5

Что вы действительно хотите сделать, так это хэш-пароль пользователя и сравнить хэш с хэшем, хранящимся в базе данных. Обратите внимание, что вы не должны использовать md5/sha1 в производственных средах. – JimL

+0

Чтобы закончить предложение @ JimL: ... потому что они смехотворно легко взломать эти дни. – Sammitch

ответ

0

Это должно дать вам хорошее представление о том, как это работает.

try { 

    $submittedEmail = !empty($_GET['email']) ? $_GET['email']: false; 
    $submittedHash = !empty($_GET['password']) ? hash('sha1', $_GET['password']): false; 

    if (!$submittedEmail || !$submittedHash) { 
    throw new \Exception('Required field(s) missing. Please try again.'); 
    } 

    if ($stmt = $mysqli->prepare("SELECT hash FROM user WHERE email = ?")) { 
    $stmt->bind_param("s", $submittedEmail); 
    $stmt->execute(); 
    $stmt->bind_result($storedHash); 
    $stmt->fetch(); 
    $stmt->close(); 
    } 

    if (!$submittedHash != $storedHash) { 
    throw new \Exception('Wrong credentials submitted. Please try again.'); 
    } 

    echo 'User ok!'; 

} catch (Exception $e) { 
    echo $e->getMessage(); 
} 

Я бы, однако рекомендуется использовать ПГПС password_verify

Так как вы, вероятно, не на PHP 5.5 пока вы можете использовать this class

+0

Спасибо, сэр! Я только что узнал, что для извлечения хэша вы также должны ввести хэш, а затем выбрать хэш из базы данных. – eaponz

+0

@Edgar: это было то, что я сказал в своем комментарии 22 часа назад: P – JimL

+0

Да, я просто повторил это lol .. во всяком случае. еще раз, спасибо :) – eaponz

0

Когда пользователь создает учетную запись и/или пароль первое, что вы нужно сделать, это создать случайную соль.

$salt = hash_hmac('sha512', "RandomStringHere", "EncryptionKeyHere"); 

Вы будете хранить эту соль в дБ вместе со своим зашифрованным паролем. Оттуда шифруйте текстовый пароль и храните его в db.

$encyptPassword = hash_hmac('sha512', "plainTextPassword" . $salt , "EncryptionKeyHere"); 

Итак, теперь у вас есть соль и зашифрованный пароль, связанный с пользователем.
Для аутентификации это так же просто, как получить соль, связанную с пользователем, взяв их незашифрованный пароль и зашифровав его - посмотрев, соответствует ли он.

Таким образом, вы никогда не знаете пароль лиц, только если он совпадает, когда они пытаются войти в

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