你可能在许多不同网站上拥有账号,每个账号使用相同的口令是个坏习惯。如果这些网站中任何一个有安全漏洞,黑客就会知道你所有的其他账号的口令。最好是在你的计算机上,使用口令管理器软件,利用一个主控口令,解锁口令管理器。然后将某个账户口令拷贝到剪贴板,再将它粘贴到网站的口令输入框。你在这个例子中创建的口令管理器程序并不安全,但它基本展示了这种程序的工作原理。
本章项目
这是博客的第一个章内项目。以后,每章都会有一些项目,展示该章介绍的一些概念。这些项目的编写方式,让你从一个空白的文件编辑器窗口开始,得到一个完整的、能工作的程序。就像交互式环境的例子一样,不要只看项目
的部分,要注意计算机的提示!
第 1 步:程序设计和数据结构
你希望用一个命令行参数来运行这个程序,该参数是账号的名称。例如,账号的口令将拷贝到剪贴板,这样用户就能将它粘贴到口令输入框。通过这种方式,用户可以有很长而复杂的口令,又不需要记住它们。
打开一个新的文件编辑器窗口,将该程序保存为 pw.py。程序开始时需要有一行#!(参见附录
B),并且应该写一些注释,简单描述该程序。因为你希望关联每个账号的名称及其口令,所以可以将这些作为字符串保存在字典中。字典将是组织你的账号和口令数据的数据结构。让你的程序看起来像下面这样:
#! python3
# pw.py - An insecure password locker program.
PASSWORDS = {'email': 'F7minlBDDuvMJuxESSKHFhTxFtjVB6', 'blog':
'VmALvQyKAxiVH5G8v01if1MLZF3sdt', 'luggage': '12345'}
第 2 步:处理命令行参数
命令行参数将存储在变量 sys.argv 中(关于如何在程序中使用命令行参数,更多信息请参见附录 B)。sys.argv 列表中的第一项总是一个字符串,它包含程序的文件名
('pw.py')。第二项应该是第一个命令行参数。对于这个程序,这个参数就是账户名称,你希望获取它的口令。因为命令行参数是必须的,所以如果用户忘记添加参数(也就是说,如果列表中少于两个值),你就显示用
法信息。让你的程序看起来像下面这样:
#! python3
# pw.py - An insecure password locker program.
PASSWORDS = {'email': 'F7minlBDDuvMJuxESSKHFhTxFtjVB6', 'blog':
'VmALvQyKAxiVH5G8v01if1MLZF3sdt', 'luggage': '12345'}
import sys
if len(sys.argv) < 2:
print('Usage: python pw.py [account] - copy account password') sys.exit()
account = sys.argv[1] # first command line arg is the account name