Pat Beirne 8 роки тому
коміт
ad63f89b0c
1 змінених файлів з 63 додано та 0 видалено
  1. 63 0
      pwgen.py

+ 63 - 0
pwgen.py

@@ -0,0 +1,63 @@
+#!/usr/bin/python
+
+"""generate word compound passwords 
+
+usage: pwgen [-c] [len default=20]
+	-c   use conjunction
+"""
+import random, sys
+
+target = 20		# default pw len
+use_conjunction = False
+
+n = 1
+if len(sys.argv)>1 and sys.argv[1]=="-c":
+	use_conjunction = True
+	n = 2
+if len(sys.argv)>n:
+	target_arg = sys.argv[n]	# if a len is spec'd on the cmd line
+	try:
+		target_arg = int(target_arg)
+	except:
+		print "sorry, you need to give me a number"
+		sys.exit()
+	if target_arg<12 or target_arg>40:
+		print "sorry, can't do that length"
+		sys.exit()
+	target = target_arg
+
+f = open("/usr/share/dict/words")
+d = f.readlines()
+f.close()
+
+num = len(d)	
+
+w=['','','']
+for i in range(3):
+	w[i] = d[random.randint(0,num-1)][:-1]  # toss out trailing \n
+	while len(w[i]) > 10:
+		w[i] = d[random.randint(0,num-1)][:-1]	# toss out long words
+		
+whole = len(w[0])+len(w[1])
+
+punc = " !@#$%^&*()-_=+[{]}\|;:/?.>,<`~"
+this_punc = punc[int(random.random() * len(punc))] 
+
+conjunctions = [" and ", " and a ", " and the "," or ", " or the ", " or a ", 
+	" with a ", " with ", " with the ", " by a ", " by the ", 
+	" on a ", " on the "," on ", " in a ", " in the ", " in ", 
+	" for ", " for a ", " for the "]
+
+if use_conjunction == False:
+	if whole >= target-6:	# if 2 words is enough
+		r = target-whole
+		pw = w[0] + this_punc*r + w[1]
+	else:		# otherwise use 3
+		whole = whole + len(w[2])
+		r = target-whole
+		pw = w[0] + this_punc*int(r/2) + w[1] + this_punc*int(r/2) + w[2]
+else:
+	pw = w[0] + conjunctions[random.randint(0,len(conjunctions)-1)] + w[1]
+	
+print "pass phrase: "+pw
+