主要用来管理各登录密码
只需要记住用户名和用来加密的字符串或者文件。
可以选复制到剪贴板或者输出到屏幕
#!/usr/bin/env python3
import os
import sys
import getpass
import hashlib
import argparse
def md5sum(file):
md5_hash = hashlib.md5()
try:
with open(file, 'rb') as f:
for byte in iter(lambda:f.read(65536), b''):
md5_hash.update(byte)
return md5_hash.hexdigest()
except IOError as e:
print(e)
pass
def generate_password(src, user, key, length=12):
password = hashlib.sha256((src + user + key).encode()).hexdigest()
password = password[0:length]
return password
class ClipBoard():
@staticmethod
def copy(message):
platform = sys.platform
if 'win32' in platform or 'cyg' in platform:
cmd = 'echo {}|clip'.format(message)
elif 'linux' in platform:
cmd = 'echo {}|xclip'.format(message)
os.system(cmd)
class GetKey(argparse.Action):
def __init__(self, option_strings, dest=None, nargs=0, default=None, required=False, type=None, metavar=None, help=None):
super(GetKey, self).__init__(option_strings=option_strings, dest=dest, nargs=nargs, default=default, required=required, type=type, metavar=metavar, help=help)
def __call__(self, parser, args, values, option_strings=None):
key = getpass.getpass("key or file path:")
setattr(args, self.dest, key)
def main():
parser = argparse.ArgumentParser(description="generate password")
parser.add_argument("src", help="target")
parser.add_argument("user", help="username")
parser.add_argument("key", action=GetKey, help="the encypt key of file")
parser.add_argument("-l", dest='length', type=int, default=12, required=False, help="the length of password")
parser.add_argument("-c", dest="copy", action="store_true", default=False, required=False, help="copy to clipboard")
args = parser.parse_args()
src = args.src
user = args.user
key = args.key
length = args.length
copy = args.copy
if os.path.isfile(key):
key = md5sum(key)
password = generate_password(src, user, key, length)
if copy:
ClipBoard.copy(password)
else:
print(password)
if __name__ == '__main__':
main()
用法 python3 pypass.py 网站地址 用户名 -l 密码长度 [-c]
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.