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

Какъв тип данни да използвате за полето за хеширана парола и каква дължина?

Актуализация:Простото използване на хеш функция не е достатъчно силно за съхраняване на пароли. Трябва да прочетете отговора от Gilles в тази тема за по-подробно обяснение.

За пароли използвайте хеш алгоритъм за укрепване на ключове като Bcrypt или Argon2i. Например в PHP използвайте функцията password_hash() , който използва Bcrypt по подразбиране.

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

Резултатът е низ от 60 знака, подобен на следния (но цифрите ще варират, защото генерира уникална сол).

$2y$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a

Използвайте SQL тип данни CHAR(60) за съхраняване на това кодиране на Bcrypt хеш. Обърнете внимание, че тази функция не кодира като низ от шестнадесетични цифри, така че не можем толкова лесно да я декодираме, за да я съхраняваме в двоичен код.

Други хеш функции все още се използват, но не и за съхранение на пароли, така че ще запазя оригиналния отговор по-долу, написан през 2008 г.

Зависи от алгоритъма за хеширане, който използвате. Хеширането винаги дава резултат със същата дължина, независимо от входа. Типично е двоичният хеш резултат да се представя в текст като серия от шестнадесетични цифри. Или можете да използвате UNHEX() функция за намаляване наполовина на низ от шестнадесетични цифри.

  • MD5 генерира 128-битова хеш стойност. Можете да използвате CHAR(32) или BINARY(16)
  • SHA-1 генерира 160-битова хеш стойност. Можете да използвате CHAR(40) или BINARY(20)
  • SHA-224 генерира 224-битова хеш стойност. Можете да използвате CHAR(56) или BINARY(28)
  • SHA-256 генерира 256-битова хеш стойност. Можете да използвате CHAR(64) или BINARY(32)
  • SHA-384 генерира 384-битова хеш стойност. Можете да използвате CHAR(96) или BINARY(48)
  • SHA-512 генерира 512-битова хеш стойност. Можете да използвате CHAR(128) или BINARY(64)
  • BCrypt генерира зависима от реализацията 448-битова хеш стойност. Вие може да се нуждае от CHAR(56), CHAR(60), CHAR(76), BINARY(56) или BINARY(60)

От 2015 г. NIST препоръчва използването на SHA-256 или по-високо за всякакви приложения на хеш функции, изискващи оперативна съвместимост. Но NIST не препоръчва използването на тези прости хеш функции за сигурно съхраняване на пароли.

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



  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 и postgreSQL, защо грешката в postgreSQL?

  2. Левещайн:MySQL + PHP

  3. Как да търсите точно съвпадаща дума с MySql Query

  4. Как да ограничим резултатите в MySQL, PostgreSQL и SQLite

  5. MySQL:Как да копирам редове, но да променям няколко полета?