2010-09-29 3 views
0

Как добавить соль к текущему хеш-паролю при регистрации пользователя. И как я должен хранить свой пароль в моей базе данных MySQL?PHP & MySQL Password Question

Вот мой код PHP до сих пор.

if ($_POST['password1'] == $_POST['password2']) { 
    $sha512 = hash('sha512', $_POST['password1']); 
    $password = mysqli_real_escape_string($mysqli, $purifier->purify(strip_tags($sha512))); 
} else { 
    $password = NULL; 
} 
+0

Можете ли вы подробно остановиться на части «как сохранить»? Вы имеете в виду, как вставить его в базу данных или какую схему базы данных вам нужно? – deceze

+0

Мне было интересно, есть ли какой-либо особый способ, чтобы вставить его в базу данных MySQL? – HELP

+0

Это просто строка, обрабатывающая ее как любой другой текст. – deceze

ответ

0
if ($_POST['password1'] == $_POST['password2']) { 
    $sha512 = hash('sha512', $_POST['password1']."salt"); //<-------------------- 
    $password = mysqli_real_escape_string($mysqli, $purifier->purify(strip_tags($sha512))); 
} else { 
    $password = NULL; 
} 
// vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv 
$user = $_POST['user']; 
$db = mysql_connect('host', 'user', 'password'); 
mysql_select_db('database', $db); 
mysql_query("UPDATES user_table SET pass=$password WHERE user=$user"); 
mysql_close($db); 
+0

@snag «соль» относится только к чему-либо, добавленному до или после пароля, перед тем, как быть хэшированным, давая ему другую хешированную строку. В этом случае я использовал строку «соль» для соли. Вы можете использовать все, что хотите, но убедитесь, что это соль, которую вы можете использовать снова, сравнивая пароль или никогда не сможете войти в систему! (обычно рекомендуется устанавливать постоянную соль. Некоторые люди используют имя пользователя или другие параметры в качестве соли) – stevendesu

0

Вы можете использовать algortithms как:

sha512($password.$salt) или sha512(sha512($password.$salt) Это до вас, как генерируется соль, до тех пор, как его хранится вместе с хэш пароля в базе данных.

2
$salt = 'my-secret-salt-92h3nc29378ry293'; 

... 

$sha512 = hash('sha512', $salt . $_POST['password1']); 
$password = mysqli_real_escape_string($mysqli, $sha512); 

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

Вы можете использовать одну соль для всех паролей, которую вы должны хранить где-нибудь в центре вашего приложения. Альтернативно, создайте случайную соль для каждого пароля и сохраните ее вместе с хешированным паролем в базе данных.

0

Я хотел бы хранить соль с хэш пароля в базе данных и вычислить его так:

$salt = "Su0"; 
$password = "mypassword0111"; 
$hash = md5(md5($password) . $salt); 

Тогда при входе пользователя:

$sql = "SELECT * FROM user_table WHERE username = '... 
//do db lookup 
$hash = md5(md5($password_from_user_login) . $salt_from_db); 
if($hash = $hash_from_db) { 
    $userloggedin = true; 
} 

Или что-то подобное