batterystaple 0.1.0dev1
Small library for generating XKCD style passphrases
License: MIT
Keywords: passwords passphrases

# (correcthorse)batterystaple

Small library for generating XKCD style passphrases. (http://xkcd.com/936/)
Word list sourced from: https://github.com/atebits/Words

In addition to generating a passphrase, by default the `generate` function logs some
basic analysis of the difficulty of cracking the password based on the number of candidate
words used in generating the passphrase.

## Usage Examples

Calling `generate` with no arguments:

```python
In [0]: from batterystaple import generate

In [1]: generate()
Generating passphrase of length 4 from 274907 candidate words...
Passphrase generated.
Number of possible passphrases with given length and constraints: 5,711,408,111,099,032,105,201
Time required to try all combinations at speed of 1 billion attempts/second: 5,711,408,111,099s
For the sake of comparison, here are several other lengths of time:
Seconds in one year: 31,557,600s
Seconds since UNIX epoch (Jan 1, 1970 12:00:00am): 1,416,230,980s
Seconds since humans emerged as a distinct species: 6,311,520,000,000s
Seconds since the universe formed: 435,494,880,000,000,000s
Out[1]: 'nonviable_gratification_workbench_subdwarfs'
```

Limiting candidate words to between 4 and 8 characters each:

```python
In [0]: from batterystaple import generate
In [1]: generate(min_length=4,max_length=8)
Eliminating all words less than 4 characters in length...
1435 words removed from list of candidates.
Eliminating all words greater than 8 characters in length...
158943 words removed from list of candidates.
Generating passphrase of length 4 from 114529 candidate words...
Passphrase generated.
Number of possible passphrases with given length and constraints: 172,052,851,568,492,369,281
Time required to try all combinations at speed of 1 billion attempts/second: 172,052,851,568s
For the sake of comparison, here are several other lengths of time:
Seconds in one year: 31,557,600s
Seconds since UNIX epoch (Jan 1, 1970 12:00:00am): 1,416,230,980s
Seconds since humans emerged as a distinct species: 6,311,520,000,000s
Seconds since the universe formed: 435,494,880,000,000,000s
Out[1]: 'visards_gentlest_inmost_imbued'
```

Generating a passphrase consisting of 5 words with no underscores
in the returned string:

```python
In [0]: from batterystaple import generate

In [1]: generate(num_words=5,with_underscores=False)
Generating passphrase of length 5 from 274907 candidate words...
Passphrase generated.
Number of possible passphrases with given length and constraints: 1,570,106,069,597,901,618,944,491,307
Time required to try all combinations at speed of 1 billion attempts/second: 1,570,106,069,597,901,568s
For the sake of comparison, here are several other lengths of time:
Seconds in one year: 31,557,600s
Seconds since UNIX epoch (Jan 1, 1970 12:00:00am): 1,416,230,980s
Seconds since humans emerged as a distinct species: 6,311,520,000,000s
Seconds since the universe formed: 435,494,880,000,000,000s
Out[1]: 'headwaysmaterialisehandstandssjambokingalpinists'
```

And finally, limiting log output:

```python
In [0]: import logging

In [1]: from batterystaple import generate

In [2]: generate(log_level=logging.WARN)
Out[2]: 'cherisher_knobbiness_yardages_teinded'

In [3]: generate(log_level=logging.ERROR)
Out[3]: 'eider_scarabaeoid_heartsome_unsleeping'

```