sql >> Database >  >> RDS >> Mysql

Mijn hashes zouten met PHP en MySQL

Allereerst hoeft uw DBMS (MySQL) geen ondersteuning te hebben voor cryptografische hashes. Je kunt dat allemaal aan de PHP-kant doen, en dat is ook wat je zou moeten doen.

Als je zout en hasj in dezelfde kolom wilt opslaan, moet je ze aaneenschakelen.

// 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;

Als u nu een wachtwoord wilt verifiëren, doet u het volgende:

// 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';
}

Misschien wil je een kijkje nemen op phpass , die ook deze techniek gebruikt. Het is een PHP hashing-oplossing die onder andere gebruik maakt van salting.

Je moet zeker eens kijken naar het antwoord op de vraag waaraan WolfOdrade is gekoppeld.



  1. Hoe u optimaal gebruik kunt maken van de commentaarfunctie in MySQL

  2. 5 veel voorkomende SQL-query ontwerp fouten te vermijden ten koste van alles

  3. Hoe items uit de sqlite-database te verwijderen met de SQLiteOpenHelper-klasse

  4. oracle -- Splits meerdere door komma's gescheiden waarden in de Oracle-tabel naar meerdere rijen