Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да създам и съхранявам md5 пароли в mysql

Редактиране 2017/11/09:Не забравяйте да погледнете отговора от O Jones.

Първо, MD5 не е най-добрият метод за хеширане, който бихте могли да използвате за този опит sha256 или sha512

Това каза, нека използваме hash('sha256') вместо md5() за представяне на хеширащата част от процеса.

Когато за първи път създадете потребителско име и парола, ще хеширате необработената парола с малко сол (някои произволни допълнителни символа, добавени към всяка парола, за да ги направите по-дълги/по-силни).

Може да изглежда нещо подобно, идващо от формуляра за създаване на потребител:

$escapedName = mysql_real_escape_string($_POST['name']); # use whatever escaping function your db requires this is very important.
$escapedPW = mysql_real_escape_string($_POST['password']);

# generate a random salt to use for this account
$salt = bin2hex(mcrypt_create_iv(32, MCRYPT_DEV_URANDOM));

$saltedPW =  $escapedPW . $salt;

$hashedPW = hash('sha256', $saltedPW);

$query = "insert into user (name, password, salt) values ('$escapedName', '$hashedPW', '$salt'); ";

След това при влизане ще изглежда така:

$escapedName = mysql_real_escape_string($_POST['name']);
$escapedPW = mysql_real_escape_string($_POST['password']);

$saltQuery = "select salt from user where name = '$escapedName';";
$result = mysql_query($saltQuery);
# you'll want some error handling in production code :)
# see http://php.net/manual/en/function.mysql-query.php Example #2 for the general error handling template
$row = mysql_fetch_assoc($result);
$salt = $row['salt'];

$saltedPW =  $escapedPW . $salt;

$hashedPW = hash('sha256', $saltedPW);

$query = "select * from user where name = '$escapedName' and password = '$hashedPW'; ";

# if nonzero query return then successful login


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Разрешено ли е да използвате числа като имена на таблици в MySQL?

  2. mysql GRANT + КЪДЕ

  3. MySQL LEFT JOIN дублира резултатите

  4. Свържете се с MySQL база данни в локална мрежа

  5. как да промените времето за изчакване за постоянни връзки на mysql