crypt
(PHP 4, PHP 5, PHP 7, PHP 8)
crypt — Незворотне хешування рядка
Увага
Ця функція (поки що) небезпечна для обробки даних у двійковій формі!
Опис
crypt(string $string, string $salt): string
crypt() повертає хешований рядок, отриманий за допомогою стандартного алгоритму UNIX, заснованого на DES або іншого алгоритму. Функція password_verify()совместима сcrypt(). Отже, хеші паролів, створені crypt(), можуть бути використані в password_verify()
До версії PHP 8.0.0 параметр salt
був необов'язковим. Однак функція crypt() створює слабкий хеш без параметра salt
, а без нього видає помилку рівня E_NOTICE
. Переконайтеся, що ви використовуєте досить складну сіль для кращої безпеки.
Функцияpassword_hash() використовує складний хеш, генерує складну сіль і застосовує правильно кількість раундів хешування автоматично . password_hash() є простою обгорткою над crypt() та сумісна з існуючими хешами паролів. Тому вітається використання password_hash()
Вид хешування визначається переданим аргументом salt (сіль). Якщо сіль не вказана, буде автоматично згенерована стандартна випадкова двосимвольна (DES) або дванадцятисимвольна (MD5) сіль, залежно від доступності алгоритму MD5 crypt(). Обумовлена константа CRYPT_SALT_LENGTH
дозволяє визначити максимально доступну довжину солі відповідно до алгоритмів, що використовуються.
Стандартная функцияcrypt() на основі DES повертає сіль як перші два символи рядка, що повертається. Крім того, вона використовує лише перші вісім символів рядка string
тому довгі рядки, що починаються з тих же восьми символів, згенерують один і той же результат (при використанні однакової солі).
Підтримуються такі типи хешей:
CRYPT_STD_DES
- Стандартне DES-шифрування з двосимвольною сіллю з алфавіту "./0-9A-Za-z"./0-9A-Za-z". Використання інших символів у солі спричинить відмову роботи crypt().CRYPT_EXT_DES
- Розширене DES-шифрування. "Сіль" є 9-символьним рядком, що складається з символу підкреслення, за яким слідують 4 символи лічильника ітерації та 4 символи солі. Кожен із цих 4-символьних рядків кодує 24 біти, найменший символ першим. Значення від до63
кодуються як./0-9A-Za-z
. Використання неприпустимих символів у солі призведе до помилки crypt().- **
CRYPT_MD5
**- MD5-шифрування з 12-символьною сіллю, що починається з $1$ CRYPT_BLOWFISH
- Blowfish-шифрування з наступною сіллю: "$2a$", "$2x$" або "$2y$", ваговий параметр із двох цифр, "$" та 22 цифри з алфавіту "./0-9A-Za-z ". Використання інших символів у солі спричинить повернення порожнього рядка. Ваговий параметр з двох цифр є двійковим логарифмом лічильника ітерацій нижчележачого хешируючого алгоритму, заснованого на Blowfish, і повинен бути в діапазоні 04-31, значення поза даним діапазоном викликають відмову crypt(). Хеші "$2x$" потенційно слабкі; Хеші "$2a$" сумісні та пом'якшують цю слабкість. Для нових хешей слід використовувати $2y$.CRYPT_SHA256
- хеш SHA-256 з шістнадцятисимвольною сіллю, що починається з $5$. Якщо рядок із сіллю починається з 'rounds=$', число N буде використано для позначення кількості раундів хешування, за аналогією з ваговим параметром Blowfish. За умовчанням кількість раундів, що використовується, дорівнює 5000, мінімально доступно 1000 і максимально 999,999,999. Будь-яке значення поза цим діапазоном буде усічено до найближчого ліміту.CRYPT_SHA512
- хеш SHA-512 з шістнадцятисимвольною сіллю, що починається з $6$. Якщо рядок із сіллю починається з 'rounds=$', число N буде використано для позначення кількості раундів хешування, за аналогією з ваговим параметром Blowfish. За умовчанням кількість раундів, що використовується, дорівнює 5000, мінімально доступно 1000 і максимально 999,999,999. Будь-яке значення поза цим діапазоном буде усічено до найближчого ліміту.
Список параметрів
string
Хешований рядок.
Застереження
При использовании алгоритма**CRYPT_BLOWFISH
**, параметрstring
обрізається до 72 байт.
salt
Параметр із сіллю, на якій буде засновано хешування. Якщо не вказано, поведінка визначається за наявністю реалізованих алгоритмів у системі та може призвести до несподіваних результатів.
Значення, що повертаються
Повертає хешований рядок або рядок коротше 13 символів, що гарантовано відрізняється від солі у разі виникнення помилки.
Увага
При валідації паролів повинні використовуватись функції порівняння рядків, стійкі до атаки за часом, для порівняння виведення функції crypt() із відомим хешом. У PHP для цього є функція hash_equals()
список змін
Версия | Опис |
---|---|
8.0.0 | salt більше не є необов'язковим. |
Приклади
Приклад #1 Приклад використання crypt()****
Loading...
Приклад #2 Использованиеcrypt()** з різними видами хешей**
Loading...
Висновок наведеного прикладу буде схожим на:
Стандартный DES: rl.3StKT.4T8M
Расширенный DES: _J9..rasmBYk8r9AiWNc
MD5: $1$rasmusle$rISCgZzpwk3UhDidwXvin0
Blowfish: $2y$07$usesomesillystringfore2uDLvp1Ii2e./U9C8sBjqp8I90dH6hi
SHA-256: $5$rounds=5000$usesomesillystri$KqJWpanXZHKq2BOB43TSaYhEWsQ1Lr5QNyPCDH/Tp.6
SHA-512: $6$rounds=5000$usesomesillystri$D4IrlXatmP7rx3P3InaxBeoomnAihCKRVQP22JZ6EY47Wc6BkroIuUUBOov1i.S5KPgErtP/EN5mcO.ChWQW21
Примітки
Зауваження: Функція розшифровки відсутня. crypt() використовує незворотний алгоритм хешування.
Дивіться також
- hash_equals() - Порівнює рядки без ризику атаки за часом
- password_hash() - Створює хеш пароля
- Сторінка керівництва Unix за вашою функцією crypt