写了一个密码管理的小脚本

2019-03-06 15:37:42 +08:00
 ucun

主要用来管理各登录密码

只需要记住用户名和用来加密的字符串或者文件。

可以选复制到剪贴板或者输出到屏幕


#!/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]

2865 次点击
所在节点    Python
11 条回复
2exploring
2019-03-06 17:16:48 +08:00
pass 不好吗。。
ifaii
2019-03-06 19:13:10 +08:00
1passwd
hundan
2019-03-06 21:42:46 +08:00
我不信楼主会用这个来管理自己密码
CallMeReznov
2019-03-06 21:46:23 +08:00
我选择 excel。。。。或者 lastpass
shuax
2019-03-06 21:51:59 +08:00
chrome 自带挺好用
indev
2019-03-06 23:39:55 +08:00
再来一次,推荐 lesspass,之前是用 nodejs,最近改为 python 了
https://github.com/lesspass/lesspass
masker
2019-03-06 23:51:55 +08:00
chrome 智能填充。chrome 推荐密码。
harde
2019-03-07 00:25:36 +08:00
就目前来说,1password 足够用
d0m2o08
2019-03-07 08:22:45 +08:00
曾经我也想撸一个自己的,后来用了 keepass+dropbox 组合
set01
2019-03-07 08:47:59 +08:00
lastpass 挺好的,免费版就够用了
ysc3839
2019-03-07 12:43:29 +08:00
我选择 KeePass。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/541768

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX