从 Excel 文档中删除密码

从 Excel 文档中删除密码

我正在提供内部支持,我们的一个用户意外地在 Excel 文件上设置了密码,我已进行适当的检查以确保用户有权访问该文档,现在想知道从 Excel 文档中删除密码的建议是什么。

不管怎样,密码是在 Excel 打开后出现的,但在您看到 Excel 中的任何数据之前。

答案1

Elcomsoft 制作了一个非常有用的程序,叫做高级 Office 密码恢复它比我用过的任何其他产品都能更好地完成工作。

在尝试恢复之前,最好先评估一下要恢复的数据,有时让用户从头开始重建文档的成本更低(并给他们一个宝贵的教训 ;-) )。AOPR 不是免费的,有时只能通过蛮力破解密码(尝试所有可能的字母组合),这可能需要很长时间。

答案2

如果您知道密码,请继续打开 Excel 文档。然后单击“文件”>“另存为”。保存按钮左侧有一个标有“工具”的小下拉菜单。单击它,然后单击“常规选项”。删除那里的密码条目,然后单击“确定”。保存文档。

如果您不知道密码是什么,可以使用 VBA 来查找它。如果我不得不猜测,您的用户可能没有使用超强密码,因此我们可以使用暴力破解方法来找到它。下面的代码很粗糙,但它帮助我在几个用户的文档中找到了弱的、丢失的密码。它使用从 1 到 z 的 ASCII 字符检查任意长度的密码。您可以从即时窗口调用它并等待几分钟,如下所示:

? GetPassword("D:\mywkbk.xlsx")

-

Public Function GetPassword(ByRef sFileName As String) As String
On Error Resume Next
    Dim pw As String
    pw = ""
    Do
        VBA.Err.Clear
        pw = GenerateNextPassword(pw)            
        Application.Workbooks.Open sFileName, False, True, , pw, pw
        VBA.DoEvents
    Loop While VBA.Err.Number = 5408
    GetPassword = pw
End Function

Public Function GenerateNextPassword(ByRef sCurrentPassword As String) As String
    Const MAX_CHAR = 122
    Const MIN_CHAR = 49

    Dim sCurrentPasswordMax As String
    Dim sNewPassword As String
    Dim i As Long

    sCurrentPasswordMax = String(Len(sCurrentPassword), Chr(MAX_CHAR))
    If sCurrentPassword = sCurrentPasswordMax Then
        'do an increment that changes the length
        sNewPassword = String(Len(sCurrentPassword) + 1, Chr(MIN_CHAR))
        Debug.Print Now(); ": "; sNewPassword
    ElseIf Asc(Right(sCurrentPassword, 1)) = MAX_CHAR Then
        'do an increment that changes multiple characters
        sNewPassword = Left(sCurrentPassword, Len(sCurrentPassword) - 1) & Chr(MIN_CHAR)
        For i = Len(sCurrentPassword) - 1 To 1 Step -1
            sNewPassword = Left(sNewPassword, i - 1) & Chr(Asc(Mid(sNewPassword, i, 1)) + 1) & Mid(sNewPassword, i + 1)
            If Asc(Mid(sCurrentPassword, i, 1)) <> MAX_CHAR Then
                Exit For
            End If
        Next i
    Else
        'do an increment on the rightmost character
        sNewPassword = Left(sCurrentPassword, Len(sCurrentPassword) - 1) & Chr(Asc(Right(sCurrentPassword, 1)) + 1)
    End If

    GenerateNextPassword = sNewPassword
End Function

答案3

就像这样,Excel 密码移除器XLA 插件,您想要什么?

编辑:想想看,也许不是 - 这是用于从受保护的工作表/工作簿中删除密码。

答案4

本文演示的 Hook 方法每次都有效。

https://stackoverflow.com/a/27508116/5757159

无需十六进制编辑器、无需下载、无需安装程序。只需一个纯 VBA 解决方案。

相关内容