gpw and xkcdpass have entered testing.
How about putting them together?
#!/usr/bin/python3 import subprocess import random import re re_spaces = re.compile(r"\s+") def get_words(cmd): out = subprocess.check_output(cmd, universal_newlines=True) return (x for x in re_spaces.split(out) if x) words = set() words.update(get_words(["xkcdpass", "-c", "10"])) for l in range(6, 9): words.update(get_words(["gpw", "10", str(l)])) for i in range(7): print(" ".join(random.sample(words, 5)))
Let's check the results:
#!/usr/bin/python from __future__ import print_function from zxcvbn import password_strength import sys for line in sys.stdin: pw = line.strip() info = password_strength(pw) print("{pw}: {crack_time_display} {entropy}".format(pw=pw, **info))
$ xkcdpass -n 5 -c 7 | ./checkpass moribund fasten cologne enamor by-and-by: centuries 132.586 woolen leptonic pogrom roster Serra: centuries 127.145 shorthand Piman suctional elution unholy: centuries 119.809 Blackwell mauvish covey selenium finished: centuries 112.936 asthma bloat crenulate clean-cut cytoplasm: centuries 150.181 agreeable refined racism Captain Cyrenaic: centuries 104.28 Bothnia stagnant atomist these revise: centuries 97.91
$ gpw 7 | ./checkpass ncenspri: 11.0 days 33.903 orsterma: instant 19.54 entsssel: 14.0 hours 29.788 tempispi: instant 20.058 nidgersi: 14.0 hours 29.725 oligalin: 51.0 minutes 25.824 iseartio: 10.0 minutes 23.207
$ ./metapass | ./checkpass herups icirop overdub oldster cingsape: centuries 147.265 mujahidin usufruct rition porky prignam: centuries 153.684 cannula irenics tableaux ntshed calcific: centuries 152.196 stopgap stale orthente Amazonia sharer: centuries 113.474 edudives mmingsso eremab prignam tableaux: centuries 147.354 tingei heroism Nathaniel cannula molasses: centuries 103.007 Torres blood lewdness prignam eremab: centuries 118.475
The strength, according to zxcvbn, seems only marginally better, and it's a wonderful way to grow a vocabulary of nonexisting words that can be dropped into cheap talk conversation to confuse the innocents.