password_hash
(PHP 5 >= 5.5.0, PHP 7, PHP 8)
password_hash — Створює хеш пароля
Опис
password_hash(string $password, string|int|null $algo, array $options = []): string
Функцияpassword_hash() створює хеш пароля, використовуючи сильний незворотний алгоритм хешування.
Підтримуються такі алгоритми:
- **
PASSWORD_DEFAULT
**- буде обрано алгоритм bcrypt (за замовчуванням з PHP 5.5.0). Зверніть увагу, алгоритм може змінитися на сильніший, коли такий додасться до PHP. При зміні алгоритму та довжина результату також може змінитися. Тому довжину поля для зберігання бази даних краще встановлювати більше 60 символів (255 символів буде хорошим значенням). PASSWORD_BCRYPT
— буде обрано алгоритм**CRYPT_BLOWFISH
**. . Генерує стандартний хеш з ідентифікатором "$2y$", сумісний з тим, що генерує функція crypt(). В результаті буде згенеровано рядок довжиною 60 символів або**false
**в случае возникновения ошибки.- **
PASSWORD_ARGON2I
**- буде обрано алгоритм хешування Argon2i. Цей алгоритм буде доступний, тільки якщо PHP зібраний за допомогою Argon2. - **
PASSWORD_ARGON2ID
**- буде обрано алгоритм хешування Argon2id. Цей алгоритм буде доступний, тільки якщо PHP зібраний за допомогою Argon2.
Опції, що підтримуються для PASSWORD_BCRYPT
:
-
salt
(string) – для самостійного завдання солі для хешування. Зверніть увагу, що це призведе до перевизначення і запобігатиме автоматичному створенню солі.Якщо не поставлено, то функція**password_hash()**буде генерувати випадкову сіль для кожного пароля, що хешується. Це кращий режим роботи.
Увага
Ця опція оголошена застарілою. Рекомендується використовувати сіль, що автоматично генерується. Починаючи з PHP 8.0.0, явно задана сіль ігнорується.
-
cost
(int) - задає алгоритмічну складність. Приклад з цією опцією можна переглянути на сторінці, присвяченій функціїcrypt()Якщо не встановлено, то буде вибрано значення за замовчуванням:
10
. Це хороша базова вартість, але її можна збільшити, якщо дозволяє продуктивність устаткування.
Опції, що підтримуються для PASSWORD_ARGON2I
і PASSWORD_ARGON2ID
:
-
memory_cost
(int) – максимальний розмір пам'яті (у кілобайтах), яка буде використана для обчислення хешу Argon2. За промовчанням буде вибрано значення константи**PASSWORD_ARGON2_DEFAULT_MEMORY_COST
** -
time_cost
(int) – максимально можливий час, який можна витратити на обчислення хешу Argon2. За промовчанням буде вибрано значення константи**PASSWORD_ARGON2_DEFAULT_TIME_COST
** -
threads
(int) — кількість потоків, які можна використовувати для обчислення хешу Argon2. За промовчанням буде вибрано значення константи**PASSWORD_ARGON2_DEFAULT_THREADS
**Увага
Доступно лише тоді, коли в PHP доступний модуль libargon2, але не при реалізації libsodium.
Список параметрів
password
Користувальницький пароль.
Застереження
Использование алгоритма**PASSWORD_BCRYPT
** призведе до обрізання поля password
до максимальної довжини - 72 байти.
algo
Константа, Що позначає алгоритм хешування пароля, що використовується.
options
Асоціативний масив із опціями. За документацією щодо підтримуваних опцій для кожного алгоритму зверніться до розділу Константи алгоритмів хешування паролів
Якщо не задано, то буде використано стандартну вартість, і сіль буде згенерована автоматично.
Значення, що повертаються
Повертає пароль хешування.
Вибраний алгоритм, вартість та сіль буде повернуто як частину хешу. Таким чином, інформація, необхідна для перевірки хеша, буде включена. Це дозволить функції password_verify() перевіряти хеш без окремого зберігання інформації про солі та алгоритм.
список змін
Версия | Опис |
---|---|
8.0.0 | password_hash() більше не повертає значення false у разі виникнення помилки. Натомість буде викинуто виняток ValueErrorякщо алгоритм хешування пароля недійсний, або Error, якщо хешування пароля не вдалося через невідому помилку. |
8.0.0 | Параметрalgo тепер припускає значення null |
7.4.0 | Параметрalgo тепер чекає рядок (string), але все ще приймає число (int) зворотної сумісності. |
7.4.0 | Модуль sodium забезпечує альтернативну реалізацію паролів Argon2. |
7.3.0 | Додано підтримку алгоритму хешування паролів Argon2id за допомогою PASSWORD_ARGON2ID |
7.2.0 | Додано підтримку хешуючого алгоритму Argon2i за допомогою PASSWORD_ARGON2I |
Приклади
Приклад #1 Приклад використання password_hash()****
Loading...
Висновок наведеного прикладу буде схожим на:
$2y$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a
Приклад #2 Приклад використання password_hash()** з ручним завданням вартості**
Loading...
Висновок наведеного прикладу буде схожим на:
$2y$12$QjSH496pcT5CEbzjD/vtVeH03tfHKFy36d4J0Ltp3lRtee9HDxY3K
Приклад #3 Приклад пошуку хорошого значення вартості функції password_hash()
Loading...
Висновок наведеного прикладу буде схожим на:
Оптимальная стоимость: 12
Приклад #4 Приклад використання функції password_hash()с Argon2i
Loading...
Висновок наведеного прикладу буде схожим на:
Хеш Argon2i: $argon2i$v=19$m=1024,t=2,p=2$YzJBSzV4TUhkMzc3d3laeg$zqU/1IN0/AogfP4cmSJI1vc8lpXRW9/S0sYY2i2jHT0
Примітки
Застереження
Рекомендується використовувати автоматичну генерацію солі. Дана функція самостійно створить хорошу сіль, якщо ви не заважатимете їй підсовуючи свою.
Як було зазначено вище, опція salt
була оголошена застарілою в PHP 7.0 і викликатиме відповідне попередження. Підтримка ручного завдання солі була видалена у PHP 8.0.
Зауваження :
Рекомендується протестувати цю функцію на обладнанні для визначення оптимального значення алгоритмічної складності. Переконайтеся, що з вибраною складністю функція виконується швидше за 350 мілісекунд для інтерактивних систем. Скрипт у наведеному вище прикладі допоможе вибрати оптимальне значення.
Зауваження: Оновлення підтримуваних алгоритмів для цієї функції (або зміна значення за замовчуванням) повинні дотримуватися правил:
- Будь-який новий алгоритм повинен бути присутнім у ядрі як мінімум 1 повний реліз PHP для того, щоб його можна було встановити за замовчуванням. Таким чином, якщо, наприклад, новий алгоритм був доданий в 7.5.5, то задати за замовчуванням його можна буде тільки в 7.7 (7.6 буде тим самим повним релізом, протягом якого він має бути присутнім, від 7.6.0 до 7.7.0 ). Але якщо новий алгоритм додано до 7.6.0, його також можна буде задати за замовчуванням у версії 7.7.0.
- Алгоритм за замовчуванням може бути змінений тільки в повному релізі (7.3.0, 8.0.0 і т. д.), але не в проміжних. Єдиним винятком є критична вразливість, знайдена в поточному алгоритмі.
Дивіться також
- password_verify() - Перевіряє, чи пароль хешу відповідає
- password_needs_rehash() - Перевіряє, що зазначений хеш відповідає заданим опціям
- crypt() - Необоротне хешування рядка
- sodium_crypto_pwhash_str() - Отримати ASCII-кодований хеш