Репликация Rails/AuthLogic Scrypt Hash Сравнение на Node/Express Server

Я работаю над переносом старого сайта ruby-on-rails на node/express/ реагировать /redux, и я запустил smack в стену для аутентификации существующих паролей пользователей. В настоящее время сайт использует AuthLogic(scrypt) для аутентификации / хеширования паролей, при этом некоторые старые пароли учетных записей все еще хэшируются с помощью алгоритма sha512 AuthLogic.

Я не могу понять, как копировать алгоритм scrypt authLogic в Node. Я рассмотрел заклинания исходного кода ruby ​​для AuthLogic и базовый пакет scrypt, который дал мне некоторые подсказки.

Я использую последнюю версию пакета npm scrypt (я пробовал несколько других без заметных различий).

Сохраненный хеш выглядит так: 400$8$1d$3fbb0d3688d9da6d$5dd919ace6bdf946d48946e9dd61f0afc5116986433633e24e58809c12b5ce9a

База данных также хранит уникальный параметр соли: fbMQa7EhFp5tdOhNsT

Основываясь на источнике драгоценных камней scrypt, похоже, что разделенные $ сегменты являются фактором стоимости и солью: n, r, p = args[0].split('$').map{ |x| x.to_i(16) } из источника Scrypt gem scrypt.rb.

Основываясь на коде, похоже, что первые три бита с разделителями $ являются фактором "стоимости" для scrypt, а последний - соль. Я понятия не имею, почему эта соль отличается от соли, хранящейся в базе данных, или как я должен их подключить. Это заставило меня попробовать:

    const n = parseInt("400", 16)
    const r = parseInt("8", 16);
    const p = parseInt("1d", 16)
    const result = scrypt.hashSync("[my password]",{"N":n,"r":r,"p":p}, 32, 3fbb0d3688d9da6d);

В результате получается другой хэш, чем хранилище базы данных, но по крайней мере правильной длины. 80e302f9f8942ec9d81fe217c03730b5b8256b22cd91ad2dd2a448ec588ec390

Поэтому я попробовал сравнение:

     const comparision = scrypt.verifyKdfSync(
    "5dd919ace6bdf946d48946e9dd61f0afc5116986433633e24e58809c12b5ce9a", 
    "[mypassword]"); 

Но это не помогло, сказав мне, что данные не являются хэшированными в скрипте. Я попытался добавить различные биты фактора стоимости и соли, с разделителями $ и без них к хешу, но безрезультатно. Я попытался превратить хеш в буферный объект, но безрезультатно. Попытка kdfSync с указанными выше параметрами также не удалась (ошибка вычисления производного ключа). Онлайн-инструменты также не распознают сохраненный хэш как хэш-код scrypt.

Помоги мне Руби-магам (или кому-то еще с кирптографическими рубанками), ты моя единственная надежда.

0 ответов

Другие вопросы по тегам