2013-07-22 2 views
-2

У меня есть система регистрации, в которой хешируют зарегистрированные пароли для sha512. Я не знаю, как сделать его логином с этим типом хэшированного пароля. вот мой код:Как войти с данными из mysql с помощью хэшированного пароля sha512 через mysql login?

<?php 

$host="localhost"; 
$username="root"; 
$password=""; 
$db_name="users"; 
$tbl_name="users"; 

mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB"); 

$username=$_POST['username']; 
$password=$_POST['password']; 

$username = stripslashes($username); 
$password = stripslashes($password); 
$username = mysql_real_escape_string($username); 
$password = mysql_real_escape_string($password); 

$sql="SELECT * FROM $tbl_name WHERE username='$username' and password='$password'"; 
$result=mysql_query($sql); 

$count=mysql_num_rows($result); 

if($count==1){ 

session_register("username"); 
session_register("password"); 
header("location:login_success.php"); 
} 
else { 
echo "Wrong Username or Password"; 
} 
?> 
+0

увидеть этот ответ http://stackoverflow.com/questions/1966154/sha-512-library-for-php#1966162 –

+0

Есть слишком много вещей неправильно с этим - рассмотрите вопрос о том, как правильно * реализовать хэш-файл с паролем auth: * не переустанавливайте аутентификацию небезопасно! * Без хорошего знания понятий это не может не быть написано неправильно! Вместо этого используйте проверенную библиотеку! Эта тема была избита до смерти, и функция 'crypt' PHP в основном обрабатывает детали. Если вы используете SHA-x (количество бит не имеет значения) или не используете соль, или не знаете, почему первое не должно использоваться, а последнее необходимо, * продолжайте читать * - но на самом деле используйте * чужой проверенный код! * – user2246674

+0

Для всех ответов, отправленных **, если вы не обращаетесь (по крайней мере, мимоходом) к вопросам, связанным с * оба * отсутствием соли и плохим выбором хеш-функции, вы делаете OP и будущее читателей - плохая услуга **. Но опять же, это было избито до смерти. – user2246674

ответ

2
$hashed = hash('sha512', $password); 
$sql="SELECT * FROM $tbl_name WHERE username='$username' and password='$hashed'" 
1

Вам нужно будет сравнить введенный пароль с хэшированным паролем в базе данных. Для этого вы также вводите введенный пароль. Если пароль действителен, хэш должен быть таким же, как в базе данных.

Так просто добавить

$password = hash('sha512', $password); 

Перед запросом.

1

использование hash() function

$password = hash('sha512', $password); 

и проверить, если sha512 доступны с помощью hash_algos():

print_r(hash_algos()); 
3

Это действительно плохо :) Читайте на инъекции SQL и почему вы shoudl использовать подготовленные заявления, вместо этого.

Это странно, что вы спрашиваете, как использовать код, который вы написали ...

Когда вы Ша строку зашифровать его, так что если у вас есть пароль sha'd в базе данных вы просто не можете Сравните их.

Вам нужно попросить пользователя ввести пароль, а затем создать новую строку из той, которая также является ша, а затем сравнить их. Что-то вроде:

get user password from form 
shaPass = hash('sha512', $userInputFromForm); 
if(shaPass == passwordFromDatabase){ 
return true; 
}else{ 
return false; 

Итак, вам нужна форма, вы должны спросить у пользователя тир имя пользователя или адрес электронной почты, то, что вы уже выбрали и попросить их за пароль.

В приведенном выше примере (который вы действительно должны изменить) вы должны создать shaPass, как я уже упоминал выше, а затем проверить условия в базе данных.

If (usernameFromForm == usernameFromDatabase) && (shaPass == passwordFromDatabase){ 
login = true; 
set session data; 
redirect to home page 
}else{ 
error etc} 

Вы должны получить идею от этого

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