从Excel文档中删除密码


11

我正在提供内部支持,我们的一位用户设法将密码意外地输入到excel文件中,我已经进行了适当的检查,以确保用户应有权访问文档,并且现在想知道从Excel文档中删除密码的建议。

出于其价值,密码将在Excel打开后显示,但您无法在excel中看到任何数据之前显示。


嗯,你有点毛绒。除非您想做复杂的密码学工作...(我不知道有任何程序可以在.xls上执行此操作)。在Excel中没有正常,自动化的方式来执行此操作-那样会首先破坏密码的含义...您唯一的希望是针对此类文件的特殊密码破解程序(这可能很难找)。也许谷歌decrypt xls或类似的东西。
塞缪尔·贾斯凯

excel .xlsx文件实际上只是一个zip文件。解压缩并遵循这些说明。过去尝试过不确定整个文件是否受密码保护是否可以正常工作。 nileshkumar83.blogspot.com/2012/05/…–
Joop

1
@SamuelJaeschke stackoverflow.com/a/27508116/5757159上的钩子方法每次都起作用。无需开裂。
ThunderFrame

Answers:


11

Elcomsoft制作了一个非常有用的程序,称为Advanced Office Password Recovery,它可以比我用过的其他工具做得更好。

在尝试进行此操作之前,可能值得在要恢复的数据上加上一个值,有时让用户从头开始重新创建文档(并教给他们一个宝贵的教训;-)),这样的开销会更便宜。AOPR不是免费的,有时只能通过蛮力(尝试所有可能的字母组合)来算出密码,这可能需要很长时间。


Elmcomsoft的程序很好,过去我通过打开没有密码发送的Excel文件在此方面取得了成功。得到一个体面的单词表,然后首先尝试一下(该隐和Abel中包含的一个3MB的列表很不错)。如果失败,给蛮力一试,但如果它是一个强壮的密码,你永远得到英寸
Dentrasi

我不喜欢在此站点上推荐商用软件,但是在这种情况下,它是迄今为止的最佳选择。推荐的。+1。
2014年

1

是这样的东西,Excel Password Remover XLA加载项,您需要做什么?

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


在道德上我们是否可以使用此工具解决?

1

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

如果您不知道密码是什么,则可以使用VBA进行查找。如果我不得不猜测,您的用户可能未使用超强密码,因此我们可以使用蛮力类型方法来找到它。下面的代码很粗糙,但是它帮助我在一些用户文档中找到了一个微弱的丢失密码。它检查ASCII字符从1到z的任何长度的密码。您可以从立即窗口中调用它,然后等待几分钟,如下所示:

? 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

这暗含了密码已丢失和忘记了,因此您的第一段是无关紧要的。如果您找到VBA例程来删除未知密码,请告知我们,但我怀疑这是不可能的。
斯科特(Scott)

1
在重新阅读了OP之后,我会强烈认为尚不清楚密码是否丢失,因此我将第一段保留在那里。我确实用一些VBA代码更新了答案,如果密码未知,可以在几分钟或更长时间内找到该密码。
Bobort

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.