|
@@ -1,10 +1,15 @@
|
|
|
-# pwgen
|
|
|
+% pwgen(1) 1.3 | Misc
|
|
|
+% Pat Beirne <patb@pbeirne.com>
|
|
|
+
|
|
|
+# Name
|
|
|
+
|
|
|
+pwgen - a phrase-based password generator
|
|
|
|
|
|
Generate word-based passwords. Based on [XKCD/936](https://xkcd.com/936/), word-based passwords are easier to remember than a string of random letters/numbers/punctuation.
|
|
|
|
|
|
[TOC]
|
|
|
|
|
|
-### Overview
|
|
|
+# Description
|
|
|
|
|
|
Password generators can be found all over the internet, but most generate random combinations of letters + numbers + punctuation. If a combination of those is long enough to be secure, it is also long enough to be difficult to remember, and possible difficult to type.
|
|
|
|
|
@@ -12,49 +17,61 @@ The XKCD comic #936 introduced the idea that a phrase of 3, 4 or 5 common words
|
|
|
|
|
|
This program runs locally on a UNIX/Linux based computer, and the passphrase never crosses the network, so you can be sure that you're the only one who has ever seen it.
|
|
|
|
|
|
-### Usage
|
|
|
-
|
|
|
Simply invoke the program, and the defaults will give you a usable password phrase:
|
|
|
|
|
|
- pwgen
|
|
|
+ pwgen -S
|
|
|
|
|
|
returns
|
|
|
|
|
|
boards.coziest.allure
|
|
|
|
|
|
-as a potential pass phrase. The following options exist:
|
|
|
+as a potential pass phrase.
|
|
|
+
|
|
|
+
|
|
|
+# Synopsis
|
|
|
+
|
|
|
+ pwgen [-sSpPkKnNcCXMa] [-L <length>] [nummber of passwords]
|
|
|
|
|
|
- -p pad the words with spaces
|
|
|
- -P pad the words with spaces, periods or commas
|
|
|
- -n pad with numbers
|
|
|
- -N pad with numbers and punctuation (other than space)
|
|
|
- -L <n> minimum phrase length (default=20) (or --length <n>)
|
|
|
- -c make 2 word phrases with conjunction between them
|
|
|
- <n> make multiple phrases (default=1)
|
|
|
+# Options
|
|
|
+
|
|
|
+ -s pad with only spaces (default; for smartphone)
|
|
|
+ -S pad with period and comma (for smartphone)
|
|
|
+ -p pad with special characters
|
|
|
+ -P pad with numbers
|
|
|
+ -k connect the words as CamelCase
|
|
|
+ -K connect the words as snake_case
|
|
|
+ -n add a number at the beginning
|
|
|
+ -N add a number at the end
|
|
|
+ -c add a special character at the begnning
|
|
|
+ -C add a special character at the end
|
|
|
+ -M capitalize the words
|
|
|
+ -a connect the words with a conjuction filler
|
|
|
+ -X same as -MNCS (capital, periods & commas, extra number & char)
|
|
|
+ -L <n> make pass phrases at least this long; default=20
|
|
|
+ num_phrases make multiple pass phrases, one per line; default=1
|
|
|
|
|
|
By default, **`pwgen`** will build a pass phrase using words from the dictionary at **`/usr/share/dict/words`** and add punctuation to separate the words.
|
|
|
|
|
|
$ pwgen
|
|
|
- consequently?restraining
|
|
|
+ consequentlyi restraining
|
|
|
|
|
|
-Adding the **`-p`** option will insist that the passphrase be padded with only spaces, making it easier to type on a smartphone. Similarly, the **`-P`** option uses only spaces, periods and commas, which are often easily accessed on a smartphone.
|
|
|
+The **`-s`** and **`-S`** options add padding using spaces or periods/commas, making thease passphrases easy to type on a smartphone. Adding the **`-p`** option will padd the phrase using a "special characters"; the character will be one of ` !@#$%^&*()-_=+[{]}\\|;:/?.>,<~`. Similarly, the **`-P`** option uses a number.
|
|
|
|
|
|
- $ pwgen -p
|
|
|
+ $ pwgen -s
|
|
|
garments mazes queasy
|
|
|
+ $ pwgen -S
|
|
|
+ crufted.teeth.buy
|
|
|
+ $ pwgen -p
|
|
|
+ eating!rocks!outside
|
|
|
$ pwgen -P
|
|
|
- crufted..teeth...buy
|
|
|
-
|
|
|
-Some servers require numbers to be embedded in the password, so the **`-n`** and **`-N`** options are available.
|
|
|
-
|
|
|
- $ pwgen -N
|
|
|
- bleeding5clusters5berries#
|
|
|
+ bleeding5clusters5berries
|
|
|
|
|
|
The **`-L`** option allows you to specify a minimum length for the pass phrase, although the result may be a few characters longer than you requested, so that the words aren't chopped up.
|
|
|
|
|
|
$ pwgen -L 30
|
|
|
- dittoed___nonabrasive___atomic
|
|
|
+ dittoed nonabrasive atomic exhaust
|
|
|
|
|
|
-The **`-c`** option uses common English conjunctions to separate a pair of words. If the 2nd word starts with a vowel, the conjuntion "a" is changed to "an". I find these phrases much easier to remember than just a sequence of words.
|
|
|
+The **`-a`** option uses common English conjunctions to separate a pair of words. If the 2nd word starts with a vowel, the conjuntion "a" is changed to "an". I find these phrases much easier to remember than just a sequence of words.
|
|
|
|
|
|
$ pwgen -c
|
|
|
quick in a crowd
|
|
@@ -69,11 +86,52 @@ Part of the reason for using pass phrases is to make them easier to remember for
|
|
|
firesides!!!spaceman
|
|
|
wannest=tabloids=weighty
|
|
|
|
|
|
-Coming soon: Instead of spaces & punctuation, you will be able to use CamelCase to indicate word boundaries. Snake_case is also a commonly requested format. L3tt3rSubst!tut!0n will also be implemented.
|
|
|
+The **`-k`** and **`-K`** options will create CamelCase and snake_case respetively. You can use the **`-M`** option to capitalize all the dictionary words.
|
|
|
+
|
|
|
+Some servers require numbers and "special characters" in the passwords, so the **`-n, -N, -c`** and **`-C`** allow you to add these characters at the beginning or the end of your passphrase. See the examples below.
|
|
|
+
|
|
|
+The **`-X`** option is included to abbreviate a commonly used combination of **`-MNCS`**.
|
|
|
+
|
|
|
+# Examples
|
|
|
+
|
|
|
+ -s dog cat mouse # default
|
|
|
+ -S dog.cat.mouse
|
|
|
+ -p dog#cat#mouse
|
|
|
+ -P dog4cat4mouse
|
|
|
+ -c !dog cat mouse
|
|
|
+ -C dog cat mouse#
|
|
|
+ -n 4dog cat mouse
|
|
|
+ -N dog cat mouse4
|
|
|
+ -cnCN $4dog cat mouse4$
|
|
|
+ -M Dog Cat Mouse
|
|
|
+ -k DogCatMouse
|
|
|
+ -kN DogCatMouse2
|
|
|
+ -K dog_cat_mouse
|
|
|
+ -KMN Dog_Cat_Mouse3
|
|
|
+ -a dog and a cat with mouse
|
|
|
+ -Sa dog.and.a.cat.with.mouse
|
|
|
+ -aMS Dog.and.a.Cat.with.Mouse
|
|
|
+ -pa dog#and#a#cat#with#mouse
|
|
|
+ -paCN dog^and^a^cat^with^mouse5%
|
|
|
+ -X Dog.Cat.Mouse6&
|
|
|
+
|
|
|
+Just select a format that you find memorable.
|
|
|
+
|
|
|
+# Files
|
|
|
+
|
|
|
+**`/usr/share/dict/words`**: a line separated list of words for the pass phrases
|
|
|
+
|
|
|
+Words ending in `'s` are dropped by the import algorithm; this may need to be changed for other languages.
|
|
|
+
|
|
|
+# Notes
|
|
|
+
|
|
|
+Don't bother trying the **`-ka`** combination....the results can be illegible.
|
|
|
|
|
|
+This project is written in Python3 and duplicated in Rust. I wanted to learn Rust and compare the complexity of both.
|
|
|
|
|
|
+# See Also
|
|
|
|
|
|
-#### Other implementations
|
|
|
+### Other implementations
|
|
|
|
|
|
<http://www.egansoft.com/password/index.php>
|
|
|
|