Skip to content

Instantly share code, notes, and snippets.

@zmts
Last active June 24, 2025 09:40
Show Gist options
  • Save zmts/b72d3bcfd07634ff519da407bb86f361 to your computer and use it in GitHub Desktop.
Save zmts/b72d3bcfd07634ff519da407bb86f361 to your computer and use it in GitHub Desktop.

Revisions

  1. Sasha Zmts revised this gist Mar 11, 2017. 1 changed file with 3 additions and 4 deletions.
    7 changes: 3 additions & 4 deletions passwords.md
    Original file line number Diff line number Diff line change
    @@ -52,7 +52,6 @@ var myHash = bcrypt.hashSync('123456', sol);
    Первые 29 символов и есть соль __$2a$10$ydKFuX0Jfxsega193bReze__

    p.s.

    https://habrahabr.ru/post/210760/

    https://habrahabr.ru/post/130965/
    - https://habrahabr.ru/post/210760/
    - https://habrahabr.ru/post/130965/
    - https://www.youtube.com/watch?v=rCIsuMEFRro
  2. Sasha Zmts revised this gist Nov 11, 2016. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion passwords.md
    Original file line number Diff line number Diff line change
    @@ -9,7 +9,7 @@
    ## Авторизация существующего юзера
    1. Юзер вводит в поле авторизации некий пароль
    2. Берем соль из базы и данный пароль
    3. Солим только сто полученный пароль, в итоге получаем хеш
    3. Солим только что полученный пароль, в итоге получаем хеш
    4. Берем валидную хеш из БД и сравниваем ее с только что полученным хешем
    5. Profit, если введенный пароль вырный авторизируем, если нет говорим юзеру ввести правильный пароль

  3. Sasha Zmts revised this gist Nov 10, 2016. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion passwords.md
    Original file line number Diff line number Diff line change
    @@ -41,7 +41,7 @@ bcrypt.compare("some_password", hash_from_db, function(error, result) {
    }
    });
    ```
    ### Про то откуда bcrypt.compare берет соль
    ### Откуда bcrypt.compare берет соль
    ```
    var sol = bcrypt.genSaltSync();
    >> '$2a$10$ydKFuX0Jfxsega193bReze'
  4. Sasha Zmts revised this gist Nov 10, 2016. 1 changed file with 2 additions and 2 deletions.
    4 changes: 2 additions & 2 deletions passwords.md
    Original file line number Diff line number Diff line change
    @@ -8,9 +8,9 @@

    ## Авторизация существующего юзера
    1. Юзер вводит в поле авторизации некий пароль
    2. Берем данный пароль, берем соль из базы
    2. Берем соль из базы и данный пароль
    3. Солим только сто полученный пароль, в итоге получаем хеш
    4. Берем валидную хеш из БД и сравниваем ее с только что полученной хешЮ
    4. Берем валидную хеш из БД и сравниваем ее с только что полученным хешем
    5. Profit, если введенный пароль вырный авторизируем, если нет говорим юзеру ввести правильный пароль

    Суть не в дешифровке хеша из базы и сверке его с введенным паролем, а в создании нового хеша из нового введенного юзером пароля и соли из базы и последующей сверкой нового хеша с хешем из БД.
  5. Sasha Zmts revised this gist Nov 10, 2016. 1 changed file with 1 addition and 0 deletions.
    1 change: 1 addition & 0 deletions passwords.md
    Original file line number Diff line number Diff line change
    @@ -52,6 +52,7 @@ var myHash = bcrypt.hashSync('123456', sol);
    Первые 29 символов и есть соль __$2a$10$ydKFuX0Jfxsega193bReze__

    p.s.

    https://habrahabr.ru/post/210760/

    https://habrahabr.ru/post/130965/
  6. Sasha Zmts revised this gist Nov 10, 2016. 1 changed file with 1 addition and 0 deletions.
    1 change: 1 addition & 0 deletions passwords.md
    Original file line number Diff line number Diff line change
    @@ -53,4 +53,5 @@ var myHash = bcrypt.hashSync('123456', sol);

    p.s.
    https://habrahabr.ru/post/210760/

    https://habrahabr.ru/post/130965/
  7. Sasha Zmts revised this gist Nov 10, 2016. 1 changed file with 4 additions and 0 deletions.
    4 changes: 4 additions & 0 deletions passwords.md
    Original file line number Diff line number Diff line change
    @@ -50,3 +50,7 @@ var myHash = bcrypt.hashSync('123456', sol);
    >> '$2a$10$ydKFuX0Jfxsega193bRezezqVklYDdrYSAHk5ho1uE8CPDuqNA8p6'
    ```
    Первые 29 символов и есть соль __$2a$10$ydKFuX0Jfxsega193bReze__

    p.s.
    https://habrahabr.ru/post/210760/
    https://habrahabr.ru/post/130965/
  8. Sasha Zmts revised this gist Nov 10, 2016. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion passwords.md
    Original file line number Diff line number Diff line change
    @@ -41,7 +41,7 @@ bcrypt.compare("some_password", hash_from_db, function(error, result) {
    }
    });
    ```
    ### Про то откуда bcrypt.compare бедет соль
    ### Про то откуда bcrypt.compare берет соль
    ```
    var sol = bcrypt.genSaltSync();
    >> '$2a$10$ydKFuX0Jfxsega193bReze'
  9. Sasha Zmts revised this gist Nov 10, 2016. 1 changed file with 7 additions and 4 deletions.
    11 changes: 7 additions & 4 deletions passwords.md
    Original file line number Diff line number Diff line change
    @@ -42,8 +42,11 @@ bcrypt.compare("some_password", hash_from_db, function(error, result) {
    });
    ```
    ### Про то откуда bcrypt.compare бедет соль
    var sol = bcrypt.genSaltSync(); >>
    '$2a$10$ydKFuX0Jfxsega193bReze'
    ```
    var sol = bcrypt.genSaltSync();
    >> '$2a$10$ydKFuX0Jfxsega193bReze'
    var myHash = bcrypt.hashSync('123456', sol); >>
    '__$2a$10$ydKFuX0Jfxsega193bReze__zqVklYDdrYSAHk5ho1uE8CPDuqNA8p6'
    var myHash = bcrypt.hashSync('123456', sol);
    >> '$2a$10$ydKFuX0Jfxsega193bRezezqVklYDdrYSAHk5ho1uE8CPDuqNA8p6'
    ```
    Первые 29 символов и есть соль __$2a$10$ydKFuX0Jfxsega193bReze__
  10. Sasha Zmts revised this gist Nov 10, 2016. 1 changed file with 4 additions and 4 deletions.
    8 changes: 4 additions & 4 deletions passwords.md
    Original file line number Diff line number Diff line change
    @@ -42,8 +42,8 @@ bcrypt.compare("some_password", hash_from_db, function(error, result) {
    });
    ```
    ### Про то откуда bcrypt.compare бедет соль
    var sol = bcrypt.genSaltSync();
    >> '$2a$10$ydKFuX0Jfxsega193bReze'
    var sol = bcrypt.genSaltSync(); >>
    '$2a$10$ydKFuX0Jfxsega193bReze'

    var myHash = bcrypt.hashSync('123456', sol);
    >> '__$2a$10$ydKFuX0Jfxsega193bReze__zqVklYDdrYSAHk5ho1uE8CPDuqNA8p6'
    var myHash = bcrypt.hashSync('123456', sol); >>
    '__$2a$10$ydKFuX0Jfxsega193bReze__zqVklYDdrYSAHk5ho1uE8CPDuqNA8p6'
  11. Sasha Zmts revised this gist Nov 10, 2016. 1 changed file with 1 addition and 4 deletions.
    5 changes: 1 addition & 4 deletions passwords.md
    Original file line number Diff line number Diff line change
    @@ -41,12 +41,9 @@ bcrypt.compare("some_password", hash_from_db, function(error, result) {
    }
    });
    ```
    Про то откуда бедет соль
    ```
    ### Про то откуда bcrypt.compare бедет соль
    var sol = bcrypt.genSaltSync();
    >> '$2a$10$ydKFuX0Jfxsega193bReze'
    var myHash = bcrypt.hashSync('123456', sol);
    >> '__$2a$10$ydKFuX0Jfxsega193bReze__zqVklYDdrYSAHk5ho1uE8CPDuqNA8p6'
    ```
  12. Sasha Zmts revised this gist Nov 10, 2016. 1 changed file with 9 additions and 0 deletions.
    9 changes: 9 additions & 0 deletions passwords.md
    Original file line number Diff line number Diff line change
    @@ -40,4 +40,13 @@ bcrypt.compare("some_password", hash_from_db, function(error, result) {
    // авторизируем юзера
    }
    });
    ```
    Про то откуда бедет соль
    ```
    var sol = bcrypt.genSaltSync();
    >> '$2a$10$ydKFuX0Jfxsega193bReze'
    var myHash = bcrypt.hashSync('123456', sol);
    >> '__$2a$10$ydKFuX0Jfxsega193bReze__zqVklYDdrYSAHk5ho1uE8CPDuqNA8p6'
    ```
  13. Sasha Zmts revised this gist Nov 10, 2016. 1 changed file with 0 additions and 1 deletion.
    1 change: 0 additions & 1 deletion passwords.md
    Original file line number Diff line number Diff line change
    @@ -40,5 +40,4 @@ bcrypt.compare("some_password", hash_from_db, function(error, result) {
    // авторизируем юзера
    }
    });
    ```
  14. Sasha Zmts revised this gist Nov 10, 2016. 1 changed file with 4 additions and 5 deletions.
    9 changes: 4 additions & 5 deletions passwords.md
    Original file line number Diff line number Diff line change
    @@ -20,11 +20,10 @@ https://github.com/dcodeIO/bcrypt.js
    ```
    var bcrypt = require('bcryptjs');
    bcrypt.genSalt(10, function(error, salt) { // герерим соль >> передаем ее в колбек
    bcrypt.hash("some_password_from_input", salt, function(error, hash) { // берем пароль из инпута + соль и генерим Хеш
    // получаем хеш и сохраняем ее в БД
    // в случае использования bcryptjs необходимость хранения соли отпадает
    // почему объясняется ниже
    bcrypt.genSalt(10, function(error, salt) { // генерим соль >> передаем ее в колбек
    bcrypt.hash("some_password_from_input", salt, function(error, hash) { // берем пароль из инпута + соль и генерим хеш
    // получаем хеш и сохраняем в БД
    // в случае использования bcryptjs необходимость хранения соли отпадает, почему объясняется ниже
    });
    });
    ```
  15. Sasha Zmts revised this gist Nov 10, 2016. 1 changed file with 3 additions and 3 deletions.
    6 changes: 3 additions & 3 deletions passwords.md
    Original file line number Diff line number Diff line change
    @@ -31,9 +31,9 @@ bcrypt.genSalt(10, function(error, salt) { // герерим соль >> пер

    ## Практическое применение: проверка хешей

    1. Берем пароль из инпута, хеш из БД
    2. Ф-ция compare сама извлекает соль из хеша и солит им пароль
    3. И сверивает новый хеш с хешем из БД
    1. Берем пароль из инпута, хеш из БД(hash_from_db)
    2. Ф-ция compare сама извлекает соль из хеша(hash_from_db) и солит им нововведенный пароль
    3. И сверивает новый хеш с хешем из БД(hash_from_db)
    Вот почему мы не сохраняли соль в БД, bcryptjs сам знает как извлечь соль из хеша, и унас отпадает необходимость хранить соль отдельно
    ```
    bcrypt.compare("some_password", hash_from_db, function(error, result) {
  16. Sasha Zmts revised this gist Nov 10, 2016. 1 changed file with 8 additions and 6 deletions.
    14 changes: 8 additions & 6 deletions passwords.md
    Original file line number Diff line number Diff line change
    @@ -30,14 +30,16 @@ bcrypt.genSalt(10, function(error, salt) { // герерим соль >> пер
    ```

    ## Практическое применение: проверка хешей

    1. Берем пароль из инпута, хеш из БД
    2. Ф-ция compare сама извлекает соль из хеша и солит им пароль
    3. И сверивает новый хеш с хешем из БД
    Вот почему мы не сохраняли соль в БД, bcryptjs сам знает как извлечь соль из хеша, и унас отпадает необходимость хранить соль отдельно
    ```
    // берем пароль из инпута, хеш из БД
    // ф-ция compare сама извлекает соль из хеша и солит им пароль
    // и сверивает новый хеш с хешем из БД
    // вот почему мы не сохраняли соль в БД
    // bcryptjs знает как извлечь соль из хеша, и унас отпадает необходимость хранить соль отдельно
    bcrypt.compare("some_password", hash_from_db, function(error, result) {
    if (result){
    // авторизируем юзера
    }
    });
    ```
  17. Sasha Zmts revised this gist Nov 10, 2016. 1 changed file with 17 additions and 4 deletions.
    21 changes: 17 additions & 4 deletions passwords.md
    Original file line number Diff line number Diff line change
    @@ -13,18 +13,31 @@
    4. Берем валидную хеш из БД и сравниваем ее с только что полученной хешЮ
    5. Profit, если введенный пароль вырный авторизируем, если нет говорим юзеру ввести правильный пароль

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

    ## Приактическое применение: создание хеша
    ## Практическое применение: создание хеша
    https://github.com/dcodeIO/bcrypt.js
    ```
    var bcrypt = require('bcryptjs');
    bcrypt.genSalt(10, function(error, salt) { // герерим соль >> передаем ее в колбек
    bcrypt.hash("some_password_from_input", salt, function(error, hash) { // берем пароль из инпута + соль и генерим Хеш
    // получаем Хеш и сохраняем ее в БД
    // получаем хеш и сохраняем ее в БД
    // в случае использования bcryptjs необходимость хранения соли отпадает
    // почему объясняется ниже
    });
    });
    ```

    ## Приактическое применение: проверка хешей
    ## Практическое применение: проверка хешей
    ```
    // берем пароль из инпута, хеш из БД
    // ф-ция compare сама извлекает соль из хеша и солит им пароль
    // и сверивает новый хеш с хешем из БД
    // вот почему мы не сохраняли соль в БД
    // bcryptjs знает как извлечь соль из хеша, и унас отпадает необходимость хранить соль отдельно
    bcrypt.compare("some_password", hash_from_db, function(error, result) {
    });
    ```
  18. Sasha Zmts revised this gist Nov 10, 2016. 1 changed file with 6 additions and 2 deletions.
    8 changes: 6 additions & 2 deletions passwords.md
    Original file line number Diff line number Diff line change
    @@ -13,7 +13,9 @@
    4. Берем валидную хеш из БД и сравниваем ее с только что полученной хешЮ
    5. Profit, если введенный пароль вырный авторизируем, если нет говорим юзеру ввести правильный пароль

    ## Приактическое применение
    Суть не в дешифровке хеша из базы и сверке его с введенным паролем, а в создании нового хеша из нового введенного юзером пароля и соли из базы и последующей сверкой нового хеша с хешем из БД

    ## Приактическое применение: создание хеша
    https://github.com/dcodeIO/bcrypt.js
    ```
    var bcrypt = require('bcryptjs');
    @@ -23,4 +25,6 @@ bcrypt.genSalt(10, function(error, salt) { // герерим соль >> пер
    // получаем Хеш и сохраняем ее в БД
    });
    });
    ```
    ```

    ## Приактическое применение: проверка хешей
  19. Sasha Zmts revised this gist Nov 10, 2016. 1 changed file with 4 additions and 3 deletions.
    7 changes: 4 additions & 3 deletions passwords.md
    Original file line number Diff line number Diff line change
    @@ -17,9 +17,10 @@
    https://github.com/dcodeIO/bcrypt.js
    ```
    var bcrypt = require('bcryptjs');
    bcrypt.genSalt(10, function(err, salt) {
    bcrypt.hash("B4c0/\/", salt, function(err, hash) {
    // Store hash in your password DB.
    bcrypt.genSalt(10, function(error, salt) { // герерим соль >> передаем ее в колбек
    bcrypt.hash("some_password_from_input", salt, function(error, hash) { // берем пароль из инпута + соль и генерим Хеш
    // получаем Хеш и сохраняем ее в БД
    });
    });
    ```
  20. Sasha Zmts revised this gist Nov 10, 2016. 1 changed file with 12 additions and 2 deletions.
    14 changes: 12 additions & 2 deletions passwords.md
    Original file line number Diff line number Diff line change
    @@ -7,9 +7,19 @@
    4. Записываем хеш(не пароль) в БД + соль в отдельном филде

    ## Авторизация существующего юзера
    1. Юзер вводит в поле авторизации пароль 123456
    1. Юзер вводит в поле авторизации некий пароль
    2. Берем данный пароль, берем соль из базы
    3. Солим только сто полученный пароль, в итоге получаем хеш
    4. Берем валидную хеш из БД и сравниваем ее с только что полученной хешЮ
    5. Profit
    5. Profit, если введенный пароль вырный авторизируем, если нет говорим юзеру ввести правильный пароль

    ## Приактическое применение
    https://github.com/dcodeIO/bcrypt.js
    ```
    var bcrypt = require('bcryptjs');
    bcrypt.genSalt(10, function(err, salt) {
    bcrypt.hash("B4c0/\/", salt, function(err, hash) {
    // Store hash in your password DB.
    });
    });
    ```
  21. Sasha Zmts revised this gist Nov 10, 2016. 1 changed file with 14 additions and 1 deletion.
    15 changes: 14 additions & 1 deletion passwords.md
    Original file line number Diff line number Diff line change
    @@ -1,2 +1,15 @@
    # Про хранение паролей в БД
    - Пароль хранится в виде

    ## При создании нового юзера
    1. При регистрации юзер вводит некий пароль
    2. Генерим случайную соль индивилуально для каждого юзера
    3. Создаем хеш на основе введенного юзером пароля и соли
    4. Записываем хеш(не пароль) в БД + соль в отдельном филде

    ## Авторизация существующего юзера
    1. Юзер вводит в поле авторизации пароль 123456
    2. Берем данный пароль, берем соль из базы
    3. Солим только сто полученный пароль, в итоге получаем хеш
    4. Берем валидную хеш из БД и сравниваем ее с только что полученной хешЮ
    5. Profit

  22. Sasha Zmts revised this gist Nov 10, 2016. 1 changed file with 2 additions and 1 deletion.
    3 changes: 2 additions & 1 deletion passwords.md
    Original file line number Diff line number Diff line change
    @@ -1 +1,2 @@
    1
    # Про хранение паролей в БД
    - Пароль хранится в виде
  23. Sasha Zmts renamed this gist Nov 10, 2016. 1 changed file with 0 additions and 0 deletions.
    File renamed without changes.
  24. Sasha Zmts created this gist Nov 9, 2016.
    1 change: 1 addition & 0 deletions gistfile1.txt
    Original file line number Diff line number Diff line change
    @@ -0,0 +1 @@
    1