首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python脚本命令行执行隐藏密码等敏感信息

Python脚本命令行执行隐藏密码等敏感信息

作者头像
酒馆丁老师
修改2020-12-13 17:22:47
1.6K0
修改2020-12-13 17:22:47
举报

Linux命令行登录系统,MySQL时,输入的密码看不到的,怎么在执行Python脚本时,密码等敏感信息也不让它出现呢?

目录

1.效果

2. 使用 getpass

3. 使用click

1

效果

在终端输入密码,不显示

G:\python\sprint\sprint>python 3.py
请输入你的用户名:admin
请输入你的密码:
账号密码正确

G:\python\sprint\sprint>

2

使用getpass模块

源码:其中原密码做了MD5加密,避免了别人通过.py 文件 拿到密码明文,MD5加密不可逆,很难解密,甚至可以双层MD5。但不要使用这种123456 这种密码。

import sys
import hashlib
import getpass


if __name__ == '__main__':
    lengthArgv = len(sys.argv)
    if (lengthArgv == 2):
        option_day = sys.argv[1]
    else:
        option_day = 3
    # 密码做了 md5 加密
    username_src = "admin"
    password_src = "7fef6171469e80d32c0559f88b377245"

    username = input("请输入你的用户名:")
    # getpass这个模块可以帮助你输入密码时把密码隐藏
    password = getpass.getpass("请输入你的密码:")

    # 创建md5对象
    m = hashlib.md5()
    # Tips
    # 此处必须encode
    # 若写法为m.update(str)  报错为:Unicode-objects must be encoded before hashing
    # 因为python3里默认的str是unicode
    # 或者 b = bytes(str, encoding='utf-8'),作用相同,都是encode为bytes
    b = password.encode(encoding='utf-8')
    m.update(b)
    str_md5 = m.hexdigest()
    if not (username == username_src and password_src == str_md5):
        print("账号密码错误")
        exit(500)
    else:
        print("账号密码正确")
        exit(200)

3

使用click模块

click 模块 目的是让命令行程序更优雅。包括传参,屏蔽敏感信息。click.prompt 就这么简单。有篇翻译 -

如何编写完美的Python命令行程序?

https://blog.csdn.net/weixin_42232219/article/details/86587201

import sys
import hashlib
import click


if __name__ == '__main__':
    lengthArgv = len(sys.argv)
    if (lengthArgv == 2):
        option_day = sys.argv[1]
    else:
        option_day = 3
    # 密码做了 md5 加密
    username_src = "admin"
    password_src = "7fef6171469e80d32c0559f88b377245"

    username = click.prompt("请输入你的用户名")
    # getpass这个模块可以帮助你输入密码时把密码隐藏
    password = click.prompt("请输入你的密码", hide_input=True)

    # 创建md5对象
    m = hashlib.md5()

    # Tips
    # 此处必须encode
    # 若写法为m.update(str)  报错为:Unicode-objects must be encoded before hashing
    # 因为python3里默认的str是unicode
    # 或者 b = bytes(str, encoding='utf-8'),作用相同,都是encode为bytes
    b = password.encode(encoding='utf-8')
    m.update(b)
    str_md5 = m.hexdigest()
    if not (username == username_src and password_src == str_md5):
        print("账号密码错误")
        exit(500)
    else:
        print("账号密码正确")
        exit(200)

运行效果:

G:\python\sprint\sprint>python 4.py
请输入你的用户名: admin
请输入你的密码:
账号密码正确

G:\python\sprint\sprint>

END

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-04-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 丁老师的技术随笔 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 如何编写完美的Python命令行程序?
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档