Passphrase Generation
The PassphraseGenerator creates memorable yet secure passphrases using the EFF diceware wordlists.
Basic Usage
Section titled “Basic Usage”use Cline\Keyphrase\Generators\PassphraseGenerator;
// Using static factory method$passphrase = PassphraseGenerator::create()->generate();
// Using constructor$generator = new PassphraseGenerator();$passphrase = $generator->generate();Word Count
Section titled “Word Count”// Default is 6 words$passphrase = PassphraseGenerator::create()->generate();
// Custom word count$passphrase = PassphraseGenerator::create() ->words(8) ->generate();Recommended word counts:
- 4 words: ~51 bits entropy (basic security)
- 6 words: ~77 bits entropy (standard security)
- 8 words: ~103 bits entropy (high security)
- 10 words: ~129 bits entropy (maximum security)
Wordlists
Section titled “Wordlists”Three EFF diceware wordlists are available:
Large Wordlist (Default)
Section titled “Large Wordlist (Default)”7,776 words, optimized for security:
$passphrase = PassphraseGenerator::create() ->large() ->generate();
// Example: "correct-horse-battery-staple-cloud-mint"Short Wordlist
Section titled “Short Wordlist”1,296 shorter, more memorable words:
$passphrase = PassphraseGenerator::create() ->short() ->generate();
// Example: "oak-tip-red-sun-bay-ice"Unique Prefix Wordlist
Section titled “Unique Prefix Wordlist”1,296 words with unique 3-character prefixes (easier autocomplete):
$passphrase = PassphraseGenerator::create() ->uniquePrefix() ->generate();
// Example: "abs-bea-cli-dry-elm-fig"Using Enum Directly
Section titled “Using Enum Directly”use Cline\Keyphrase\Enums\EFFWordList;
$passphrase = PassphraseGenerator::create() ->useWordList(EFFWordList::Short) ->generate();Separators
Section titled “Separators”Default Separator
Section titled “Default Separator”Hyphen is the default separator:
$passphrase = PassphraseGenerator::create()->generate();// Example: "word-word-word-word-word-word"Custom Separator
Section titled “Custom Separator”$passphrase = PassphraseGenerator::create() ->separator('_') ->generate();// Example: "word_word_word_word_word_word"
$passphrase = PassphraseGenerator::create() ->separator('.') ->generate();// Example: "word.word.word.word.word.word"Space Separator
Section titled “Space Separator”$passphrase = PassphraseGenerator::create() ->withSpaces() ->generate();// Example: "word word word word word word"No Separator
Section titled “No Separator”$passphrase = PassphraseGenerator::create() ->noSeparator() ->generate();// Example: "wordwordwordwordwordword"Case Transformations
Section titled “Case Transformations”Title Case
Section titled “Title Case”$passphrase = PassphraseGenerator::create() ->titleCase() ->generate();// Example: "Correct-Horse-Battery-Staple-Cloud-Mint"Uppercase
Section titled “Uppercase”$passphrase = PassphraseGenerator::create() ->uppercase() ->generate();// Example: "CORRECT-HORSE-BATTERY-STAPLE-CLOUD-MINT"Lowercase (Default)
Section titled “Lowercase (Default)”$passphrase = PassphraseGenerator::create() ->lowercase() ->generate();// Example: "correct-horse-battery-staple-cloud-mint"Including Numbers
Section titled “Including Numbers”Add a random number to the passphrase for additional entropy:
$passphrase = PassphraseGenerator::create() ->words(4) ->includeNumber() ->generate();// Example: "correct-42-horse-battery-staple"The number is inserted at a random position among the words.
Generating Multiple Passphrases
Section titled “Generating Multiple Passphrases”$passphrases = PassphraseGenerator::create() ->words(6) ->titleCase() ->generateMany(5);
// Returns array of 5 unique passphrasesEntropy Calculation
Section titled “Entropy Calculation”$generator = PassphraseGenerator::create() ->words(6) ->large();
$entropy = $generator->entropy();// Returns: ~77.55 bits
// Including a number adds entropy$entropy = PassphraseGenerator::create() ->words(6) ->includeNumber() ->entropy();// Returns: ~81 bitsFull Example
Section titled “Full Example”use Cline\Keyphrase\Generators\PassphraseGenerator;
// Create a passphrase generator with common settings$generator = PassphraseGenerator::create() ->words(6) ->large() ->titleCase() ->separator('-');
// Generate passphrases$passphrase1 = $generator->generate();$passphrase2 = $generator->generate();
// Check entropy$entropy = $generator->entropy();echo "Passphrase entropy: {$entropy} bits";
// Generate with number for extra security$withNumber = $generator->includeNumber()->generate();Why Passphrases?
Section titled “Why Passphrases?”Passphrases offer several advantages over traditional passwords:
- Memorability: Words are easier to remember than random characters
- Typing Speed: Familiar words are faster to type
- Security: Long passphrases have excellent entropy
- Resistance: Harder to shoulder-surf than short passwords
Comparison
Section titled “Comparison”| Type | Example | Entropy | Memorability |
|---|---|---|---|
| 8-char password | K9#mPx$2 | ~52 bits | Hard |
| 6-word passphrase | correct-horse-battery-staple-cloud-mint | ~77 bits | Easy |
| 12-char password | K9#mPx$2nQwR | ~79 bits | Very Hard |