узел bcrypt js не определен c? - PullRequest
       6

узел bcrypt js не определен c?

1 голос
/ 28 февраля 2020

Я использовал brypt один раз для аутентификации по паролю. По некоторым причинам я не могу установить его на несколько машин. В любом случае я установил bcrypt js вместо этого.

const bcrypt = require('bcryptjs')
const salt = bcrypt.genSaltSync(10);
const hash = bcrypt.hashSync("hallo", salt);
console.log(hash);

Я выполнил код шесть раз и получил следующие шесть выводов:

$2a$10$SnIj6q67OvPXINLeajqONebAjZltLwrqs8OU/5C871NyTib.SJeyu
$2a$10$8aLhlLvYi5RcuV40SansxOuQroS.SPmPG6GMjsRlcndjjzRSJkFRu
$2a$10$wZJCuAUwtG9v.oh8tgZ9M.unYBe/MRv0jO3IU51gLz8XI1ClYJni6
$2a$10$mGhPf85kGpn/PBdV3JjDsuXypnQ.E2pBTEoDtDZ/eW6qsq5DAb6M6
$2a$10$WkEro4eOiuqzE0.hB/ka2eyPUpWE/Dv5dWkqSZ3yujQ2PA3iRYJMC
$2a$10$l4GVALWSvWdcOin37WXsQeIufA7SHxvhU.9dIasXspsSPi1e1/IeG

, но этот дополнительный код сравнивает его на самом деле

const hallo = bcrypt.compareSync("hallo", hash);
console.log(hallo);  //always true
const burger = bcrypt.compareSync("burger", hash);
console.log(burger);  //always false

как действительно ли bcrypt сравнивает ha sh со строкой? Разве он смотрит только на первые 7 одинаковых символов?

спасибо

Амит

1 Ответ

3 голосов
/ 28 февраля 2020

Это правильно. Bcrypt - соленая га sh, и соль генерируется случайным образом. Это означает, что каждый раз, когда вы запускаете ha sh, вы получите случайный результат. Это сделано преднамеренно.

Часть га sh до . (точка) и после последней $ является встроенной солью. Вам не нужно хранить соль отдельно, поскольку она является частью га sh. Поскольку соль генерируется случайным образом правильно, вы получаете полную защиту от атак радужного стола.

Способ, которым bcrypt проверяет ха sh, заключается в том, чтобы сначала извлечь встроенную соль. Затем снова запустите строку и пропустите алгоритм. Если полученный ха sh совпадает с ха sh, то он проходит.

...