sql >> Databáze >  >> RDS >> Mysql

Jaký typ dat použít pro pole hashovaného hesla a jakou délku?

Aktualizace:Pouhé použití hashovací funkce není dostatečně silné pro ukládání hesel. Měli byste si přečíst odpověď od Gillese v tomto vláknu pro podrobnější vysvětlení.

Pro hesla použijte hashovací algoritmus pro posílení klíče, jako je Bcrypt nebo Argon2i. Například v PHP použijte funkci password_hash() , který ve výchozím nastavení používá Bcrypt.

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

Výsledkem je 60znakový řetězec podobný následujícímu (číslice se však budou lišit, protože generuje jedinečnou sůl).

$2y$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a

Použijte datový typ SQL CHAR(60) k uložení tohoto kódování Bcrypt hashe. Všimněte si, že tato funkce se nekóduje jako řetězec hexadecimálních číslic, takže ji nemůžeme tak snadno uvolnit a uložit do binárního kódu.

Další hashovací funkce stále mají využití, ale ne pro ukládání hesel, takže níže ponechám původní odpověď, napsanou v roce 2008.

Záleží na použitém hashovacím algoritmu. Hašování vždy vytváří výsledek stejné délky, bez ohledu na vstup. Je typické reprezentovat binární výsledek hash v textu jako řadu hexadecimálních číslic. Nebo můžete použít UNHEX() funkce pro zmenšení řetězce hexadecimálních číslic na polovinu.

  • MD5 generuje 128bitovou hodnotu hash. Můžete použít CHAR(32) nebo BINARY(16)
  • SHA-1 generuje 160bitovou hodnotu hash. Můžete použít CHAR(40) nebo BINARY(20)
  • SHA-224 generuje 224bitovou hodnotu hash. Můžete použít CHAR(56) nebo BINARY(28)
  • SHA-256 generuje 256bitovou hodnotu hash. Můžete použít CHAR(64) nebo BINARY(32)
  • SHA-384 generuje 384bitovou hodnotu hash. Můžete použít CHAR(96) nebo BINARY(48)
  • SHA-512 generuje 512bitovou hodnotu hash. Můžete použít CHAR(128) nebo BINARY(64)
  • BCrypt generuje 448bitovou hash hodnotu závislou na implementaci. Vy může potřebovat CHAR(56), CHAR(60), CHAR(76), BINARY(56) nebo BINARY(60)

Od roku 2015 NIST doporučuje používat SHA-256 nebo vyšší pro jakékoli aplikace hashovacích funkcí vyžadujících interoperabilitu. NIST však nedoporučuje používat tyto jednoduché hashovací funkce pro bezpečné ukládání hesel.

Menší hashovací algoritmy mají svá použití (jako interní v aplikaci, ne pro výměnu), ale jsou známý jako crackable .



  1. Deset způsobů, jak váš datový projekt selže

  2. Jak zkontrolovat, zda je řetězec jedinečným identifikátorem?

  3. PDO získá poslední vložené ID

  4. MariaDB JSON_TABLE() Vysvětleno