This project came to fruition because I was disatisfied with the quality of the dictionary based password generators that abound everywhere.

It came to my attention that most of those projects used massive word sets, and were full of slang and idioms that are as strange to type as a random set of characters are. Not only that, there were generally limited to a specific dictionary, typically the most common english words.

This sample password generator uses 5 different texts in order to generate different flavours of passwords. Ranging from The Happy Prince, by Oscar Wilde, Sermon on the Mount, The Bible (KJV), the original phrasing of Lorem Ipsum (source), a smattering of Klingon that I could find on the web and a snippet of War and Peace, by Tolstoy which also includes some French, it seems. You can even use your own custom text as a source (eg. copy the text off this about page, as a demo).

Harkening back to my first year of uni -- we were given a project to write a program that simulated the monkeys problem*, but with a twist: the keys on the typewriter was to be changed to reflect the previously typed character, in order to promote actual words, but would still be random.

For example, given the input string:

Sally sells seashells by the seashore.

The 'first' keyboard would have 6 letters, 4 of them are 's', as well as 'b' and 't'.

After randomly selecting a letter, the keyboard is changed. So, if 's' was chosen, then the keyboard would now have three 'e's and one 'a'. And so on.

This project uses that mentality. Given a source document we generate a tree of possible letter combinations. We control our accuracy by limiting how deep the tree can be. I think it provides a much better result than a dictionary system proposed in xkcd's correct horse battery staple:

Finally, the source of this project is GPLv3. I think there is too much rampant 'ripping' off when MIT is used, so sadly this code isn't provided using such permissive licensing. Feel free to contact me if you need to discuss this issue. I am open to suggestions.

* The gist of the theorem was that given an infinite number of monkeys behind a typewriter, eventually they'll type out the works of Shakespeare. Sadly, experimentation showed the folly of such mentation:

Not only did the monkeys produce nothing but five total pages largely consisting of the letter S, the lead male began by bashing the keyboard with a stone, and the monkeys continued by urinating and defecating on it.