Как хранить пароль

Ответ

Хранить пароли в открытом виде нельзя. Используйте хеширование с солью (salt) для безопасного хранения.

Рекомендации:

  1. Используйте алгоритмы типа bcrypt, Argon2 или PBKDF2
  2. Добавляйте уникальную соль для каждого пароля
  3. Никогда не храните пароли в plain text

Пример с bcrypt (Node.js):

const bcrypt = require('bcrypt');
const saltRounds = 10;

// Хеширование
const hashPassword = async (plainPassword) => {
  return await bcrypt.hash(plainPassword, saltRounds);
};

// Проверка
const comparePassword = async (plainPassword, hash) => {
  return await bcrypt.compare(plainPassword, hash);
};

Ответ 18+ 🔞

А, пароли, блядь! Ну это же классика, ёпта! Прямо как в анекдоте про Герасима и Муму, только тут не собачку топить, а свои же данные в унитаз спустить.

Слушай сюда, распиздяй! Хранить пароли открытым текстом — это как оставить ключи от квартиры под ковриком с запиской «ЗАХОДИТЕ, ДОБРЫЕ ЛУДИ». Ты представляешь? Любой проходимец, любой пидарас шерстяной, который к тебе в базу заглянет, сразу всех твоих пользователей поимеет. Удивление пиздец будет, когда начнут жалобы лететь, что от их аккаунтов рассылки идут.

Так что правило номер один, блядь: НИКОГДА, НИКОГДА, В РОТ МЕНЯ ЧИХ-ПЫХ, НЕ ХРАНИ ПАРОЛИ КАК ЕСТЬ!

Что делать-то надо? А надо их хешировать, да ещё и с солью! Соль — это не та, что в суп, а случайная строка, которую ты к паролю примешиваешь перед хешированием. Зачем? А затем, чтобы два одинаковых пароля у разных пользователей в базе выглядели по-разному! И чтобы всякие умники с своими радужными таблицами не пришли и всё не расшифровали за пять секунд.

И не вздумай использовать для этого какую-нибудь древнюю, просранную md5-хуйню. Это уже давно манда с ушами. Бери нормальные, современные, специально для паролей придуманные штуки.

Вот смотри, как это примерно выглядит, на примере bcrypt:

const bcrypt = require('bcrypt');
const saltRounds = 10;

// Хеширование (когда пользователь регистрируется или меняет пароль)
const hashPassword = async (plainPassword) => {
  return await bcrypt.hash(plainPassword, saltRounds);
};

// Проверка (когда пользователь логинится)
const comparePassword = async (plainPassword, hash) => {
  return await bcrypt.compare(plainPassword, hash);
};

Видишь? Красота, блядь! Ты пароль пользователя не хранишь, ты хранишь только этот невъебенный хеш. А когда он приходит и вводит свой пароль, ты его введённую хуйню так же хешируешь и сравниваешь с тем, что лежит в базе. Совпало — молодец, проходи. Не совпало — иди нахуй, пизда бородавчатая.

bcrypt — это отлично. Ещё есть Argon2, PBKDF2 — тоже овердохуища надёжные варианты. Главное — не выдумывай велосипед, не пиши свою крипту, а бери готовое, проверенное, чтоб потом не охуеть от последствий.

Запомни: безопасность пользователей — это не хуй собачий. Это святое. Иначе доверия ебать ноль будет, и накроется твой стартап медным тазом. Всё, лекция окончена, иди делай.