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 就这么简单。有篇翻译 -
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