#!/usr/bin/env python import sys def mkpass(**kw): """ usage: mkpass(kw['size']=8, kw['type']='dlLp', kw['include']=None, kw['exclude']=None, kw['debug']=False) d: digits l: lower case letters L: upper case letters p: punctuation """ from string import digits,letters,punctuation from random import choice strs='' for t in kw['type']: try: strs+={ 'd':digits, 'l':letters[0:26], 'L':letters[26:], 'p':punctuation }[t] except: print("Please specify the correct TYPE string.") print("for example: -t dlL") sys.exit(0) if kw['include']: strs+=kw['include'] if kw['exclude']: for e in kw['exclude']: strs=strs.replace(e, '', 1) if kw['debug']: print("Generating password from string\n%s\n" % strs) return ''.join( [ choice(strs) for i in range( kw['size'] ) ]) if __name__=='__main__': from optparse import OptionParser parser=OptionParser() parser.add_option("-s", "--size", action="store", type="int", dest="size", default=8) parser.add_option("-t", "--type", action="store", type="string", dest="type", default="dlLp", help="TYPE can be d(digits), l(lower case letters), L(upper case letters) and p(punctuations) or any of the combinations of them, defaults to dlLp") parser.add_option("-i", "--include", action="store", type="string", dest="include",default=None, help="use backslash to escape punctuations '\"`?!$;") parser.add_option("-e", "--exclude", action="store", type="string", dest="exclude",default=None, help="use backslash to escape punctuations '\"`?!$;") parser.add_option("-d", "--debug", action="store_true", dest="debug") (opts,args)=parser.parse_args() print mkpass(size=opts.size, type=opts.type, include=opts.include, exclude=opts.exclude, debug=opts.debug)