对市面上的random password管理器不是很放心,还是自己写一个来的安心。
生成器:
#!/usr/bin/python import random,sys SPECIAL='~_+`-=!@#$%^&*(){}|\][:;<>,.?/' PRINT='asdfghjklqwertyuiopzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890' def get_next(s): return s[random.randrange(0, len(s))] length=15 if (len(sys.argv) ==2): length=int(sys.argv[1]) p='' for i in range(length): if random.random() > 0.8: p += get_next(SPECIAL) else: p += get_next(PRINT) print '' print p print ''
管理器
#!/usr/bin/python import os, sys, keyring, getpass, subprocess, shlex cmd_dir = os.path.dirname(sys.argv[0]) tmp_file = '%s/pwtmp' % (cmd_dir) option = '' if len(sys.argv) > 1: option = sys.argv[1] passwd = keyring.get_keyring().get_password("masterpw","sma").encode('ascii') enc_cmd='openssl aes-256-cbc -a -salt -in %s -out %s/pw.enc -pass pass:%s' % (tmp_file, cmd_dir, passwd) dec_cmd='openssl aes-256-cbc -d -a -salt -in %s/pw.enc -pass pass:%s' % (cmd_dir, passwd) dec_cmd_file='openssl aes-256-cbc -d -a -salt -in %s/pw.enc -out %s -pass pass:%s' % (cmd_dir, tmp_file, passwd) def my_exec(cmd): args = shlex.split(cmd) p = subprocess.Popen(args) ret = p.wait() if ret != 0: raise "Failed to exec %s" % cmd if option != 'edit': p = subprocess.Popen(shlex.split(dec_cmd), stdout=subprocess.PIPE) for l in p.stdout.readlines(): l = l.strip() if option: if l.lower().find(option) >= 0: print l else: print l elif option == 'edit': my_exec(dec_cmd_file) my_exec('vi ' + tmp_file) my_exec(enc_cmd) my_exec('rm ' + tmp_file) my_exec('scp %s/pw.enc shawnma.com:' % cmd_dir)