【发布时间】:2019-02-05 23:45:10
【问题描述】:
为了演示,我想破解一个 excel 文件(名为“xl”)的密码。我使用以下代码,但是(1)它无法打开 excel 并且(2)它在密码被破解时不会停止运行。
import itertools
import string
from win32com.client import Dispatch
file = input('Path: ')
chars = string.ascii_lowercase + string.digits
for password_length in range(1, 2):
for password in itertools.product(chars, repeat=password_length):
password = ''.join(password)
print ('Testing password: '+ password)
instance = Dispatch ('Excel.Application')
try:
instance.Workbooks.Open(file, False, True, None, password)
print ('Password Cracked: ' + password)
#break
except:
pass
为了简单起见,我将 excel 密码设置为“p”,代码只运行了 1 个字符组合。此外,当您运行代码时,它需要输入 excel 文件的路径。
我无法弄清楚我的错误,我希望能得到一些帮助。另外,如果对 word 文档执行此操作更容易,请告诉我。
【问题讨论】:
-
try:块中的break行已被注释掉,因此在破解密码时不会执行它,只会继续执行 for 循环 -
感谢您的回答。我评论了这一行,因为当它使用 break 命令运行程序时,它会在第一次迭代中停止。
-
在这种情况下,如果
instance.Workbooks.Open()无法打开工作簿,它似乎不会引发错误。您可能想要存储instance.Workbooks.Open()的结果并检查它是否为None,而不是try/catch -
当我运行
instance.Workbooks.Open(file)时,我得到<COMObject Open>