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

Осоляване на хешовете ми с PHP и MySQL

На първо място, вашата СУБД (MySQL) не трябва да има никаква поддръжка за криптографски хешове. Можете да направите всичко това от страна на PHP и това също трябва да направите.

Ако искате да съхранявате сол и хаш в една и съща колона, трябва да ги свържете.

// the plaintext password
$password = (string) $_GET['password'];

// you'll want better RNG in reality
// make sure number is 4 chars long
$salt = str_pad((string) rand(1, 1000), 4, '0', STR_PAD_LEFT);

// you may want to use more measures here too
// concatenate hash with salt
$user_password = sha512($password . $salt) . $salt;

Сега, ако искате да потвърдите парола, направете следното:

// the plaintext password
$password = (string) $_GET['password'];

// the hash from the db
$user_password = $row['user_password'];

// extract the salt
// just cut off the last 4 chars
$salt = substr($user_password, -4);
$hash = substr($user_password, 0, -4);

// verify
if (sha512($password . $salt) == $hash) {
  echo 'match';
}

Може да искате да разгледате phpass , който също използва тази техника. Това е PHP решение за хеширане, което използва осоляване наред с някои други неща.

Определено трябва да погледнете отговора на въпроса, към който WolfOdrade има връзка.



  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 заявка Заменете NULL с празен низ в Select

  2. Как да получа максимума от две стойности в MySQL?

  3. MySQL - Избор на колона, която не е в група по

  4. Синхронизиране на данни между MySQL и MongoDB

  5. Кой е най-добрият начин да се свържете с Mysql база данни в Delphi