sql >> Database >  >> RDS >> Mysql

Welk gegevenstype moet worden gebruikt voor het gehashte wachtwoordveld en welke lengte?

Update:het simpelweg gebruiken van een hashfunctie is niet sterk genoeg om wachtwoorden op te slaan. Lees het antwoord van Gilles in deze thread voor een meer gedetailleerde uitleg.

Gebruik voor wachtwoorden een sleutelversterkend hash-algoritme zoals Bcrypt of Argon2i. Gebruik bijvoorbeeld in PHP de functie password_hash() functie , die standaard Bcrypt gebruikt.

$hash = password_hash("rasmuslerdorf", PASSWORD_DEFAULT);

Het resultaat is een reeks van 60 tekens die lijkt op de volgende (maar de cijfers zullen variëren, omdat het een uniek zout genereert).

$2y$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a

Gebruik het SQL-gegevenstype CHAR(60) om deze codering van een Bcrypt-hash op te slaan. Merk op dat deze functie niet codeert als een reeks hexadecimale cijfers, dus we kunnen hem niet zo gemakkelijk unhexen om in binair op te slaan.

Andere hash-functies hebben nog steeds toepassingen, maar niet voor het opslaan van wachtwoorden, dus ik zal het originele antwoord hieronder houden, geschreven in 2008.

Het hangt af van het hash-algoritme dat u gebruikt. Hashing levert altijd een resultaat van dezelfde lengte op, ongeacht de invoer. Het is gebruikelijk om het binaire hash-resultaat in tekst weer te geven als een reeks hexadecimale cijfers. Of u kunt de UNHEX() functie om een ​​reeks hexadecimale cijfers te halveren.

  • MD5 genereert een 128-bits hashwaarde. U kunt CHAR (32) of BINARY (16)
  • . gebruiken
  • SHA-1 genereert een 160-bit hashwaarde. U kunt CHAR(40) of BINARY (20)
  • . gebruiken
  • SHA-224 genereert een 224-bits hashwaarde. U kunt CHAR (56) of BINARY (28) gebruiken
  • SHA-256 genereert een 256-bit hashwaarde. U kunt CHAR(64) of BINARY (32)
  • . gebruiken
  • SHA-384 genereert een 384-bit hashwaarde. U kunt CHAR(96) of BINARY(48)
  • . gebruiken
  • SHA-512 genereert een 512-bit hashwaarde. U kunt CHAR(128) of BINARY(64)
  • . gebruiken
  • BCrypt genereert een implementatieafhankelijke 448-bits hashwaarde. Jij heeft mogelijk CHAR(56), CHAR(60), CHAR(76), BINARY(56) of BINARY(60) nodig

Vanaf 2015 raadt NIST het gebruik van SHA-256 of hoger voor alle toepassingen van hashfuncties die interoperabiliteit vereisen. Maar NIST raadt het gebruik van deze eenvoudige hashfuncties af om wachtwoorden veilig op te slaan.

Kleinere hash-algoritmen hebben hun gebruik (zoals intern in een applicatie, niet voor uitwisseling), maar ze zijn bekend als kraakbaar .



  1. `toon tabel aanmaken` equivalent in oracle sql

  2. SQL Server voorwaardelijke stroom

  3. mysql_fetch_assoc():opgegeven argument is geen geldige MySQL-resultaatbron in php

  4. 5 MySql nuttige vragen tijdens projectontwikkeling