узел - соль bcrypt [дубликат]

Это одно из мест, с помощью которого привязка данных, используемая во многих новых фреймворках JavaScript, будет очень полезна для вас ...

Итак, если вы используете Angular, React или любые другие фреймворки, которые делают два способа связывания данных, эта проблема просто исправлена ​​для вас, поэтому простым языком ваш результат undefined на первом этапе, поэтому вы получили result = undefined до получения данных, а затем, как только вы получите результат , он будет обновляться и присваиваться новому значению, которое отвечает на ваш вызов Ajax ...

Но как вы можете сделать это в чистом javascript или jQuery, например, как вы задали этот вопрос?

Вы можете использовать обратный вызов, обещание и недавно наблюдаемое, чтобы обрабатывать его для вас, например, в обещаниях мы имеем некоторые функции, такие как success () или then (), которые будут выполняться, когда ваши данные будут готовы для вас, с функцией обратного вызова или подписки на наблюдаемые.

Например, в вашем случае, в котором вы используете jQuery, вы можете сделать что-то вроде этого:

$(document).ready(function(){
    function foo() {
        $.ajax({url: "api/data", success: function(data){
            fooDone(data); //after we have data, we pass it to fooDone
        }});
    };

    function fooDone(data) {
        console.log(data); //fooDone has the data and console.log it
    };

    foo(); //call happens here
});

Для получения дополнительной информации n изучение обещаний и наблюдаемых, которые являются новыми способами для создания асинхронных материалов.

461
задан Nathan Long 25 March 2015 в 19:51
поделиться

2 ответа

Это bcrypt:

Создайте случайную соль. Фактор «стоимость» был предварительно настроен. Соберите пароль.

Выведите ключ шифрования из пароля с использованием коэффициента соли и стоимости. Используйте его для шифрования известной строки. Сохраните стоимость, соль , и шифрованный текст. Поскольку эти три элемента имеют известную длину, их легко конкатенировать и хранить в одном поле, но они могут разделить их позже.

Когда кто-то пытается аутентифицироваться, извлекайте сохраненную стоимость и соль , Выведите ключ из пароля ввода, стоимости и соли. Зашифруйте одну и ту же хорошо известную строку. Если сгенерированный текст шифрования соответствует сохраненному шифруемому тексту, пароль соответствует.

Bcrypt работает очень похоже на более традиционные схемы на основе алгоритмов, таких как PBKDF2. Основное различие заключается в использовании производного ключа для шифрования известного простого текста; другие схемы (разумно) предполагают, что функция деривации ключа необратима и непосредственно сохраняет производный ключ.


Сохраненный в базе данных хэш-файл bcrypt может выглядеть примерно так:

$ 2a $ 10 $ vI8aWBnW3fID.ZQ4 / zo1G.q1lRps.9cGLcZEiGDMVr5yUP1KUOYTa

Это фактически три поля, разделенные символом «$»:

  • 2a идентифицирует версию алгоритма bcrypt, которая была использована.
  • 10 - коэффициент затрат; 210 используются итерации функции деривации ключа (этого, кстати, недостаточно. Я бы рекомендовал стоимость 12 или более.)
  • vI8aWBnW3fID.ZQ4/zo1G.q1lRps.9cGLcZEiGDMVr5yUP1KUOYTa - это соль и шифрованный текст, объединенный и кодируется в модифицированном Base-64. Первые 22 символа декодируют до 16-байтового значения для соли. Остальные символы - это шифрованный текст, который нужно сравнить для аутентификации.

Этот пример взята из документации для реализации Ruby Coda Hale.

600
ответ дан erickson 27 August 2018 в 05:45
поделиться

Я считаю, что фраза должна была быть сформулирована следующим образом:

bcrypt имеет соли , встроенные в генерируемые хэши , чтобы предотвратить атаки радужного стола.

< / blockquote>

Утилита bcrypt сама по себе не поддерживает список солей. Скорее, соли генерируются случайным образом и добавляются к выходу функции, так что они позже запоминаются (согласно реализации Java bcrypt ). Иными словами, «хеш», созданный bcrypt, не является только хешем. Скорее, это хеш и , соль конкатенирована.

138
ответ дан Adam Paynter 27 August 2018 в 05:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: