haibrini/password-generator

PHP library for generating easy to remember but hard to guess passwords

v0.6.0 2017-10-22 16:34 UTC

This package is not auto-updated.

Last update: 2025-07-06 06:56:14 UTC


README

PHP 7 ready Build Status

PHP library for generating easy to remember, but hard to quess passwords. Inspired by xkcd comic, library generates phrases from frequently used words:

  • English phrases (example "throat fast only idea")
  • German phrases (examle "laut welt ganze liter")
  • Russian transliterated phrases (example "kater nekiy zabrat dazhe")

Try online

Install

Via Composer

{
    "require": {
        "haibrini/password-generator": "~0.5"
    }
}

Basic usage

Generate password with default length (4 words) and default separator (space).

use HaiBrini\Password\Generator;

// would output something like "throat fast only idea"
echo Generator::generateEn();

// would output something like "laut welt ganze liter"
echo Generator::generateDe();

// would output something like "kater nekiy zabrat dazhe"
echo Generator::generateRuTranslit();

Each of above functions accepts length and separator paramenetrs.

// would output something like "ritual-error-raise-arab-tail"
echo HaiBrini\Password\Generator::generateEn(5, '-');

Advanced usage

Call static function Generator::generate to generate passwords from wordlists. Params

  • wordlists - array of WordListInterface. If array is shorter then length, function would iterate from the beginning of array.
  • lenght - password length in words. Default - 4
  • separator - words separator. Default - ' '(space)

Example:

echo Generator::generate(
    [
        new HaiBrini\Password\WordList\En(), 
        new HaiBrini\Password\WordList\RuTranslit()
    ],
    5, 
    '-'
);

// would output something like "idea-dovod-critic-sever-happy"

Word lists

English

List of 2048 most frequently used English words.

Class Comment Word lenghth Example
WordList\En all words 4-6 have, that
WordList\En\Nouns nouns 4-6 time, year
WordList\En\Verbs verbs 4-6 have, would
WordList\En\Adjectives adjectives 4-8 other, good

German

List of 2048 most frequently used german words(source). Words with diacritic letters (ä, ö, ü) and eszett (ß) excluded.

Class Comment Word lenghth Example
WordList\De all words 4-6 sich, nicht

Russian Transliterated

List of 2048 transliterated most frequently used Russain words (source). "Hard" to transliterate letters (ь, ъ) excluded.

Class Comment Word lenghth Example
WordList\RuTranslit all words 4-6 chto, etot
WordList\RuTranslit\Nouns nouns 4-8 chelovek, vremya
WordList\RuTranslit\Verbs verbs 4-8 moch, skazat
WordList\RuTranslit\Adjectives adjectives 4-8 novyy, bolshoy

Security

If OpenSSL extension avaivable library would use openssl_random_pseudo_bytes for random number generation.

Testing

$ php vendor/bin/phpunit

Changelog

0.5.0

  • Added option for uppercase/capitalize

Contributing

To add new language open an issue with link to frequency dictionary.

Pull requests are welcome.

Credits

All Contributors

License

The MIT License (MIT). Please see License File for more information.