返回介绍

13.6 实践项目

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

作为实践,编程完成下列任务。

13.6.1 PDF偏执狂

利用第9章的os.walk()函数编写一个脚本,遍历文件夹中的所有PDF(包含子文件夹),用命令行提供的口令对这些PDF加密。用原来的文件名加上_encrypted.pdf后缀,保存每个加密的PDF。在删除原来的文件之前,尝试用一个程序读取并解密该文件,确保它被正确的加密。

然后编写一个程序,找到文件夹中所有加密的PDF文件(包括它的子文件夹),利用提供的口令,创建PDF的解密拷贝。如果口令不对,程序应该打印一条消息,并继续处理下一个PDF文件。

13.6.2 定制邀请函,保存为Word文档

假设你有一个客人名单的文本文件。这个guests.txt文件每行有一个名字,像下面这样:

Prof. Plum
Miss Scarlet
Col. Mustard
Al Sweigart
RoboCop

写一个程序,生成定制邀请函的Word文档,如图13-11所示。

图13-11 定制的邀请函脚本生成的Word文档

因为python-docx只能使用Word文档中已经存在的样式,所以你必须先将这些样式添加到一个空白Word文件中,然后用python-docx打开该文件。在生成的Word文档中,每份邀请函应该占据一页,所以在每份邀请函的最后一段调用add_break(),添加分页符。这样,你只需要打开一份Word文档,就能打印所有的邀请函。

你可以从http://nostarch.com/automatestuff/下载示例guests.txt文件。

13.6.3 暴力PDF口令破解程序

假定有一个加密的PDF文件,你忘记了口令,但记得它是一个英语单词。尝试猜测遗忘的口令是很无聊的任务。作为替代,你可以写一个程序,尝试用所有可能的英语单词来解密这个PDF文件,直到找到有效的口令。这称为暴力口令攻击。从http://nostarch.com/automatestuff/下载文本文件dictionary.txt。这个字典文件包含44000多个英语单词,每个单词占一行。

利用第8章学过的文件读取技巧来读取这个文件,创建一个单词字符串的列表。然后循环遍历这个列表中的每个单词,将它传递给decrypt()方法,如果这个方法返回整数 0,口令就是错的,程序应该继续尝试下一个口令。如果decrypt()返回1,程序就应该终止循环,打印出破解的口令。你应该尝试每个单词的大小写形式(在我的笔记本上,遍历来自字典文件的所有88000个大小写单词,只要几分钟时间。这就是不应该使用简单英语单词作为口令的原因)。

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

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

发布评论

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