Вопрос проверяет понимание криптографической стойкости хеш-функций и важности безопасного хранения паролей.
MD5 (Message Digest 5) — это криптографическая хеш-функция, разработанная в 1991 году. Она создавалась для проверки целостности данных, а не для безопасного хранения паролей. Основные проблемы MD5 в контексте паролей:
Допустим, два пользователя выбрали пароль "password123". Без соли их хеши MD5 будут одинаковыми: 482c811da5d5b4bc6d497ffa98491e38. Если злоумышленник узнает хеш одного, он сразу узнает пароль для обоих. С солью каждый хеш уникален, даже если пароли совпадают.
Современные рекомендации:
const bcrypt = require('bcrypt');
const saltRounds = 12;
async function hashPassword(password) {
const salt = await bcrypt.genSalt(saltRounds);
const hash = await bcrypt.hash(password, salt);
return hash; // сохраняем в БД
}
async function checkPassword(password, hash) {
return await bcrypt.compare(password, hash);
}Вывод: MD5 не предназначен для хранения паролей из-за высокой скорости, уязвимости к коллизиям и отсутствия встроенной поддержки соли. Для защиты пользовательских данных всегда используйте специализированные алгоритмы хеширования паролей, такие как bcrypt, scrypt или Argon2, с обязательным добавлением соли и настройкой фактора стоимости.