最近简单学习了一下python语言,对模块和库有了一点了解,写个博客作为自己学习的记录。
这次是关于暴力破解excel密码的程序,起因是自己的一个文档忘记密码了,但自己没什么经验,就参照了一些博客的代码,按照自己的思路拼接而成。
首先是打开带密码的excel。
excel = DispatchEx("Excel.Application") # 启动excel
excel.Visible = False # 去掉可视化
demo = excel.Workbooks.Open(filename, UpdateLinks=False, ReadOnly=False, Format=None,Password=password)
然后是生成密码字典。
list1 = [chr(i) for i in range(48, 58)] # 0-9的ASCLL码值
list2 = [chr(i) for i in range(65, 91)] # A-Z的ASCLL码值
list3 = [chr(i) for i in range(97, 123)] # a-z的ASCLL码值
newlist = list1+list2+list3 #看情况选择三种中的几种
然后就是尝试破解了。
for i in product(newlist, repeat=length): # 开始生成密码result = ''.join(i)password = resultprint('尝试第%d次,密码为%s' % (currentresult,password))try:demo = excel.Workbooks.Open(filename, UpdateLinks=False, ReadOnly=False, Format=None,Password=password)excel.Visible = Truebreak# read_excel_password(filename, password)except:currentresult+=1continue
最后组合一下就可以得到完整代码。
from itertools import product
from win32com.client import DispatchEx
# product作用:将提供的容器中的所有元素排列组合形式按照指定的长度完全列出来
# 1.将数字、字母放入容器中
# 2.指定长度范围
# 3.开始生成“密码”excel = DispatchEx("Excel.Application") # 启动excel
excel.Visible = False # 去掉可视化list1 = [chr(i) for i in range(48, 58)] # 0-9的ASCLL码值
list2 = [chr(i) for i in range(65, 91)] # A-Z的ASCLL码值
list3 = [chr(i) for i in range(97, 123)] # a-z的ASCLL码值
newlist = list1
print(newlist)# 指定长度范围
currentresult=1
if __name__ == '__main__':filename = "此处是文件路径"for length in range(4, 8):# product(字符串容器,repeat=长度)for i in product(newlist, repeat=length): # 开始生成密码result = ''.join(i)password = resultprint('尝试第%d次,密码为%s' % (currentresult,password))try:demo = excel.Workbooks.Open(filename, UpdateLinks=False, ReadOnly=False, Format=None,Password=password)excel.Visible = Truebreakexcept:currentresult+=1continuebreak
自己尝试后才发现暴力破解其实根本行不通,因为自己的电脑只能做到每秒尝试20次左右,而三位数的组合就近万种,不过这也算是一次很不错的尝试。