Чтобы еще больше повысить безопасность, вы можете использовать шифрование md5 вместе с двумя различными строками соли, одну статическую соль, определенную в файле php, а затем еще одну случайно сгенерированную уникальную соль для каждой записи пароля.
Вот как вы можете генерировать соль, строку md5 и хранить:
$unique_salt_string = hash('md5', microtime());
$password = hash('md5', $_POST['password'].'static_salt'.$unique_salt_string);
$query = "INSERT INTO users (username,password,salt) VALUES('bob','".$password."', '".$unique_salt_string."');
Теперь у вас есть статическая соль, которая действительна для всех ваших паролей, которая хранится в файле .php. Затем при выполнении регистрации вы генерируете уникальный хеш для этого конкретного пароля.
Все это заканчивается тем, что два пароля, которые написаны одинаково, будут иметь два разных хэша. Уникальный хеш хранится в базе данных вместе с текущим идентификатором. Если кто-то захватит базу данных, у него будет каждая уникальная соль для каждого конкретного пароля. Но у них нет вашей статической соли, которая усложняет жизнь каждому «хакеру».
Вот как вы проверяете действительность вашего пароля на login.php, например:
$user = //username input;
$db_query = mysql_query("SELECT salt FROM users WHERE username='$user'");
while($salt = mysql_fetch_array($db_query)) {
$password = hash('md5',$_POST['userpassword'].'static_salt'.$salt[salt]);
}
Этот метод очень мощный и безопасный. Если вы хотите использовать шифрование sha512, просто поместите его в хэш-функцию вместо md5 в приведенном выше коде.