*/ final class password extends core { /** * Сгенерировать мнемонический пароль * * @param int $length Длина (количество слов) * @param array &$errors Журнал ошибок * * @return ?string Пароль */ public static function mnemonic(int $length = 4, array &$errors = []): ?string { try { preg_match_all( '/\w+/um', mb_convert_encoding( <<learn($matches[0]); // Инициализация генератора $generator = new generator(new rng(222, 666), $chain); // Генерация $result = $generator->generate(); // Обрезка результата for ($password = [], $choose = rand(0, count($result) - 20); isset($result[$choose]) && count($password) < $length; $choose++) $password[] = $result[$choose]; return implode(' ', $password); } catch (exception $e) { // Запись в журнал ошибок $errors[] = [ 'text' => $e->getMessage(), 'file' => $e->getFile(), 'line' => $e->getLine(), 'stack' => $e->getTrace() ]; } return null; } /** * Сгенерировать классический пароль * * @param int $length Длина (количество символов) * @param array &$errors Журнал ошибок * * @return ?string Пароль */ public static function classic(int $length = 12, array &$errors = []): ?string { try { // Инициализация реестра символов $symbols = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; // Инициализация буфера пароля $password = ''; // Определение максимальной длины $max = mb_strlen($symbols, '8bit') - 1; if ($max < 1) throw new Exception('Длина пароля должна быть не менее двух символов'); // Генерация пароля for ($i = 0; $i < $length; ++$i) $password .= $symbols[random_int(0, $max)]; return $password; } catch (exception $e) { // Запись в журнал ошибок $errors[] = [ 'text' => $e->getMessage(), 'file' => $e->getFile(), 'line' => $e->getLine(), 'stack' => $e->getTrace() ]; } return null; } }