Нет, вы делаете это неправильно.MD5 - или, точнее, был - криптографически безопасный хеш.Это не относится напрямую к хеш-паролям.Чтобы хэшировать пароли, вам нужен хеш пароля, который содержит случайную соль и коэффициент работы (стоимость или количество итераций, в зависимости от используемого хэша пароля).Примерами этого являются bcrypt, PBKDF2 и более новый Argon2. Здесь - это случайная статья, в которой обсуждается использование хэшей паролей.
Что касается кодировки, я бы всегда старался придерживаться существующих стандартов там, где они существуют.Для хеширования паролей применимым стандартом является Modular Crypt Format .Если вы разрабатываете новую схему без строгих требований к взаимодействию, вы также можете использовать Формат хеширования пароля .
Оба используют тип кодировки base 64 в качестве выходного формата.для соли и пароля.Примером является вывод bcrypt $2a$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy
, где 2a
указывает bcrypt и формат, 10
- это стоимость (коэффициент работы), а N9qo8uLOickgx2ZMRZoMye
- кодирование соли 64;остальное - хеш пароля.Обратите внимание, что между солью и паролем нет знака доллара.
Я взял вышеприведенный пример со страницы bcrypt Википедии , которая является интересной отправной точкой для получения дополнительной информации,включая, возможно, вывод MD5-хеша для crypt (который, как указано, не следует использовать).
Почти забыл, да, 16 случайных байтов / 128 битов соли - это множество ;никто бы не моргнул, если бы вы использовали 8 байт, более 32 байт переусердствовали.