xt1.Refresh If Err.Number <> 0 Then '如果解密成功,打开文档,显示密码,退出过程 Err.Clear Else 'MsgBox "word password" Label1.Caption = "文档密码:" Text1.Text = pass Me.Refresh wd.Visible = True CmdStartCrack.MousePointer = 0 CmdStartCrack.Caption = "开始破解" blnProcessing = False Set wd = Nothing Exit Sub End If DoEvents If Not blnProcessing Then Exit For Next I If Not blnProcessing Then Exit For Next K wd.Quit Set wd = Nothing End If CmdStartCrack.Caption = "开始破解" If blnProcessing Then MsgBox "没有找到密码,可能是密码位数不对!", , "提示信息..." blnProcessing = False End Sub 3. 时间复杂度分析 一个算法的时间复杂度,是指该算法的时间耗费,是该算法所求解问题规模n的函数。根据前面讲的实现原理,我们知道,破解算法的时间耗费主要集中在尝试打开OFFICE文档上,因此,当我们假设破解一个N位字符串密码,且选定密码字符范围的总字符数为ArrayLen时,该算法的时间复杂度是O(ArrayLen^N)。即,当N确定后,该算法的时间复杂度是N次方阶;当ArrayLen确定后,该算法的时间复杂度是指数阶。都是高数量级的时间复杂度。 4. 说明 穷举法解密对系统资源的占用是十分惊人的,在解密的过程中最好不要运行其他应用程序。如果安装有瑞星等杀毒软件,应将杀毒软件的“office安全助手”去掉,以便加快程序的运行速度。 该程序在WinXP+OfficeXP+VB6.0环境下测试通过,笔者随便测试了一个5位数字密码,在P4机器上,8分钟左右即可解开口令。 参考文献: [1] 王建华 译. Visual Basic 6 开发人员指南. 北京:机械工业出版社,1999 上一页 [1] [2] [3]
Tags:
|