对市面上的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)