Чи потрібно зберігати сіль із криптом?


189

javadoc bCrypt має цей код, як зашифрувати пароль:

String pw_hash = BCrypt.hashpw(plain_password, BCrypt.gensalt()); 

Щоб перевірити, чи відповідає пароль простого тексту, який був попередньо хешований, використовуйте метод checkpw:

if (BCrypt.checkpw(candidate_password, stored_hash))
    System.out.println("It matches");
else
    System.out.println("It does not match");

Ці фрагменти коду для мене означають, що випадково утворена сіль викидається. Це так чи це просто оманливий фрагмент коду?

Відповіді:


214

Сіль включена в хеш (закодована у форматі base64).

Наприклад, у традиційних паролях Unix сіль зберігалася як перші два символи пароля. Решта символів представляли хеш-значення. Функція шашки знає це і витягує хеш, щоб повернути сіль.


59
Сіль IS включена в пароль. Тож вам не потрібно рятувати сіль.
Swapnonil Mukherjee

2
Дякую за це. Я б хотів, щоб вони сказали, що в javadoc :) (Я подивився джерело і підтвердив, - але я не знав, що шукав раніше)
RodeoClown

1
Спасибі - я теж намагався це зрозуміти! Тепер мені цікаво, чи це гарна ідея. Чи є перевага / недолік зберігати сіль у хеші, ніж зберігати її окремо?
Адам

8
@Adam - Оскільки сіль утворюється випадковим чином, це означає, що вам не потрібно мати метод об'єднання двох речей у вашій базі даних.
RodeoClown

Я переглянув вихідний код і виявив, що хоча аргумент JavaDoc для солі "можливо, генерується за допомогою BCrypt.gensalt", я виявив, що вам потрібно використовувати метод genSalt () або ви отримуєте винятки = /
the_new_mr
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.