Вы должны использовать хеш-имя пользователя, пароль и соль вместе, например:
hash(length(username)+"_veryuniquesalt4rtLMAO"+username+password)
Таким образом, ваша база данных не уязвима ни к каким существующим радужным таблицам из-за соли и хэша имени пользователянаряду с паролем также невозможно создать радужную таблицу для вашего конкретного метода хеширования.
Использование «медленного» алгоритма хеширования обеспечит лучшую защиту паролей, как если бы они были более сложными, но этокомпромисс, когда вы определились с определенным уровнем медлительности, вы не можете просто уменьшить масштаб, когда вам нужна производительность для других целей.
Возможно также выполнить медленное хеширование на стороне клиента, используя JavaScript, таким образомне будет проблемой производительности, но метод, конечно, потребует включения JavaScript.
Независимо от того, что вы выберете, немного медленное хеширование гораздо лучше, чем ничего, используйте 1 миллисекунду вместо 1 микросекунды иваша защита в 1000 раз сильнее.
Вы можете использовать bcrypt, или выможет заставить обычный алгоритм хеширования выполнять большую часть дополнительной работы, просто убедитесь, что эта дополнительная работа не связана главным образом с конкатенацией строк.
В конце концов, лучше не украсть вашу базу данных, так много паролей такСлабые, что они легко извлекаются независимо от того, что вы делаете.