Фрази-паролі з'єднують кілька випадкових слів, наприклад sphere-quartz-bright-flame, щоб отримати облікові дані, які одночасно безпечні та легкі для читання й запам’ятовування. PHP Passphrase, створений Nico Bleiler, генерує такі фрази за рекомендованою EFF методикою, комбінуючи випадкові слова з EFF long word list. Пакет відтворює реалізацію Bitwarden на Rust і має вбудовану підтримку Laravel, а також можливість роботи як самостійна PHP-бібліотека.
Пакет корисний для додатків, які генерують тимчасові паролі або коди відновлення, або в будь-яких випадках, коли людсько-зрозуміла та безпечна послідовність слів краща за випадкову рядкову комбінацію символів.
Основні можливості
PHP Passphrase пропонує кілька опцій для генерації фраз-паролів:
- Сумісні з Bitwarden опції — кількість слів, роздільники, капіталізація, додавання числа
- Використовує EFF long word list (7 776 слів), який пакетується та кешується для швидкого генератора
- Користувацькі списки слів — з файлів або масивів
- Інтеграція з Laravel через service provider, фасад, dependency injection та публікаційний конфіг
- Самостійне використання без Laravel або іншого фреймворку
Початок роботи
Встановіть пакет через Composer:
composer require nicobleiler/php-passphrase
Laravel автоматично знайде service provider. Додаткових налаштувань не потрібно, щоб почати генерувати фрази.
Генерація фраз-паролів
У Laravel використовуйте фасад Passphrase для генерації:
use NicoBleiler\Passphrase\Facades\Passphrase;
// Default: 3 words, hyphen separator, no capitalize, no number
Passphrase::generate();
// "unadvised-stubble-squid"
// Customize the output
Passphrase::generate(
numWords: 5,
wordSeparator: '~',
capitalize: true,
includeNumber: true,
);
// "Reggae~Blip~Prayer~Tabasco~Football5"
Впровадження залежностей
Пакет реєструє PassphraseGenerator як singleton у контейнері Laravel, тож його можна інжектити в класи:
use NicoBleiler\Passphrase\PassphraseGenerator;
class AuthController
{
public function __construct(
private PassphraseGenerator $passphrase,
) {}
public function temporaryPassword(): string
{
return $this->passphrase->generate(
numWords: 4,
capitalize: true,
includeNumber: true,
);
}
}
Самостійне використання
Пакет працює й без Laravel. Створіть екземпляр PassphraseGenerator напряму:
use NicoBleiler\Passphrase\PassphraseGenerator;
$generator = new PassphraseGenerator();
echo $generator->generate(); // "zone-statue-corporal"
Користувацькі списки слів
Клас WordList підтримує завантаження слів з файлів або масивів:
use NicoBleiler\Passphrase\WordList;
use NicoBleiler\Passphrase\PassphraseGenerator;
// From a file (plain text or EFF diceware format)
$wordList = WordList::fromFile('/path/to/wordlist.txt');
// From an array
$wordList = WordList::fromArray([
'pizza',
'whisk',
'juice',
'beyond',
'quartz',
'flame',
'vortex',
'bright',
'sphere',
]);
$generator = new PassphraseGenerator($wordList);
echo $generator->generate(numWords: 4);
У Laravel ви можете вказати шлях до власного файлу списку слів через опублікований конфіг:
php artisan vendor:publish --tag=passphrase-config
Потім вкажіть шлях у config/passphrase.php:
'word_list_path' => resource_path('wordlists/my-custom-list.txt'),
Налаштування
Опублікований файл конфігурації дозволяє задати значення за замовчуванням для всіх опцій генерації:
return [
'num_words' => 3,
'word_separator' => '-',
'capitalize' => false,
'include_number' => false,
// null = bundled EFF long word list
// Or set an absolute path to a custom word list file
'word_list_path' => null,
];
Щоб дізнатися більше про PHP Passphrase та переглянути вихідний код, відвідайте репозиторій на GitHub.