V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
ucun
V2EX  ›  Python

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

  •  
  •   ucun · 2019-03-06 15:37:42 +08:00 · 3062 次点击
    这是一个创建于 2123 天前的主题,其中的信息可能已经有所发展或是发生改变。

    主要用来管理各登录密码

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

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

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

    pypass.png

    11 条回复    2019-03-07 12:43:29 +08:00
    2exploring
        1
    2exploring  
       2019-03-06 17:16:48 +08:00
    pass 不好吗。。
    ifaii
        2
    ifaii  
       2019-03-06 19:13:10 +08:00 via iPhone
    1passwd
    hundan
        3
    hundan  
       2019-03-06 21:42:46 +08:00 via Android   ❤️ 2
    我不信楼主会用这个来管理自己密码
    CallMeReznov
        4
    CallMeReznov  
       2019-03-06 21:46:23 +08:00
    我选择 excel。。。。或者 lastpass
    shuax
        5
    shuax  
       2019-03-06 21:51:59 +08:00
    chrome 自带挺好用
    indev
        6
    indev  
       2019-03-06 23:39:55 +08:00
    再来一次,推荐 lesspass,之前是用 nodejs,最近改为 python 了
    https://github.com/lesspass/lesspass
    masker
        7
    masker  
       2019-03-06 23:51:55 +08:00 via Android
    chrome 智能填充。chrome 推荐密码。
    harde
        8
    harde  
       2019-03-07 00:25:36 +08:00
    就目前来说,1password 足够用
    d0m2o08
        9
    d0m2o08  
       2019-03-07 08:22:45 +08:00
    曾经我也想撸一个自己的,后来用了 keepass+dropbox 组合
    set01
        10
    set01  
       2019-03-07 08:47:59 +08:00
    lastpass 挺好的,免费版就够用了
    ysc3839
        11
    ysc3839  
       2019-03-07 12:43:29 +08:00
    我选择 KeePass。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2693 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 11:47 · PVG 19:47 · LAX 03:47 · JFK 06:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.