Menu
CoddyTech

Получение ключа пароля

Часть раздела Аутентификация и безопасность путешествия по Node.js на Coddy. Урок 2 из 24.

Ключ пароля вычисляется на основе пароля и соли. В отличие от кодирования, этот расчёт не предназначен для обратного преобразования. Scrypt делает подбор паролей затратным, требуя выполнения вычислений для каждой попытки. При одинаковых пароле, соли и настройках выработки, включая длину ключа, результат будет воспроизводимым. Такой производный ключ обычно называют хешем пароля.

const key = await scryptAsync('invite 4821', 'example-only', 16);
return key.toString('hex');

Третий аргумент — длина ключа в байтах. Предоставленный вспомогательный метод использует promisify, чтобы преобразовать scrypt в Node, основанный на обратном вызове, в функцию, возвращающую промис. Вы можете использовать с ней await, как при чтении файла. Фиксированная соль в этом упражнении позволяет сравнивать результаты; при реальном хранении паролей используется новая случайная соль.

В следующем упражнении создаётся новая случайная соль, необходимая для хранения нового пароля.

challenge icon

Задание

Легко

Это небольшой учебный проект. Настройка уже выполнена; редактируй только exercise.js.

Заверши функцию: получи 32-байтовый ключ из переданных пароля и соли, затем верни его шестнадцатеричное представление в key. Дважды отправь POST с {"password":"practice","salt":"fixed-for-this-exercise"} на /result: появится один и тот же 64-символьный ключ. Измени любой из входных параметров — и ключ изменится.

Попробуйте сами

import { scryptAsync } from './crypto.js';
export async function exercise({ password, salt }) {
    return { key: password };
}

Все уроки раздела Аутентификация и безопасность

Потренируйтесь самостоятельно: Песочница Express