返回介绍

6.3 项目:口令保管箱

发布于 2024-01-22 21:44:06 字数 2921 浏览 0 评论 0 收藏 0

你可能在许多不同网站上拥有账号,每个账号使用相同的口令是个坏习惯。如果这些网站中任何一个有安全漏洞,黑客就会知道你所有的其他账号的口令。最好是在你的计算机上,使用口令管理器软件,利用一个主控口令,解锁口令管理器。然后将某个账户口令拷贝到剪贴板,再将它粘贴到网站的口令输入框。

你在这个例子中创建的口令管理器程序并不安全,但它基本展示了这种程序的工作原理。

本章项目

这是本书的第一个章内项目。以后,每章都会有一些项目,展示该章介绍的一些概念。这些项目的编写方式,让你从一个空白的文件编辑器窗口开始,得到一个完整的、能工作的程序。就像交互式环境的例子一样,不要只看项目的部分,要注意计算机的提示!

第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

第3步:复制正确的口令

既然账户名称已经作为字符串保存在变量account中,你就需要看看它是不是PASSWORDS字典中的键。如果是,你希望利用pyperclip.copy(),将该键的值复制到剪贴板(既然用到了pyperclip模块,就需要导入它)。请注意,实际上不需要account变量,你可以在程序中所有使用account的地方,直接使用sys.argv[1]。但名为account的变量更可读,不像是神秘的sys.argv[1]。

让你的程序看起来像这样:

#! python3
# pw.py - An insecure password locker program.
PASSWORDS = {'email': 'F7minlBDDuvMJuxESSKHFhTxFtjVB6',
             'blog': 'VmALvQyKAxiVH5G8v01if1MLZF3sdt',
             'luggage': '12345'}

import sys, pyperclip
if len(sys.argv) < 2:
    print('Usage: py pw.py [account] - copy account password')
    sys.exit()

account = sys.argv[1] # first command line arg is the account name

if account in PASSWORDS:
    pyperclip.copy(PASSWORDS[account])
    print('Password for ' + account + ' copied to clipboard.')
else:
    print('There is no account named ' + account)

这段新代码在PASSWORDS字典中查找账户名称。如果该账号名称是字典中的键,我们就取得该键对应的值,将它复制到剪贴板,然后打印一条消息,说我们已经复制了该值。否则,我们打印一条消息,说没有这个名称的账号。

这就是完整的脚本。利用附录B中的指导,轻松地启动命令行程序,现在你就有了一种快速的方式,将账号的口令复制到剪贴板。如果需要更新口令,就必须修改源代码的PASSWORDS字典中的值。

当然,你可能不希望把所有的口令都放在一个地方,让某人能够轻易地复制。但你可以修改这个程序,利用它快速地将普通文本复制到剪贴板。假设你需要发出一些电子邮件,它们有许多同样的段落。你可以将每个段落作为一个值,放在PASSWORDS字典中(此时你可能希望对这个字典重命名),然后你就有了一种方式,快速地选择一些标准的文本,并复制到剪贴板。

在Windows上,你可以创建一个批处理文件,利用Win-R运行窗口,来运行这个程序(关于批处理文件的更多信息,参见附录B)。在文件编辑器中输入以下代码,保存为pw.bat,放在C:\Windows目录下:

@py.exe C:\Python34\pw.py %*
@pause

有了这个批处理文件,在Windows上运行口令保存程序,就只要按下Win-R,再输入pw <account name>。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文