为什么此代码禁用了表单保护?

时间:2018-03-12 13:42:41

标签: vba excel-vba passwords excel-2007 password-protection

以下代码由this website提供,我用它取消保护我不知道密码的工作表。

Sub DisableSheetProtection()
Dim password As String
On Error Resume Next
For i = 65 To 66: For j = 65 To 66
For k = 65 To 66: For l = 65 To 66
For m = 65 To 66: For n = 65 To 66
For o = 65 To 66: For p = 65 To 66
For q = 65 To 66: For r = 65 To 66
For S = 65 To 66: For t = 32 To 126
ActiveSheet.Unprotect Chr(i) & _
Chr(j) & Chr(k) & Chr(l) & _
Chr(m) & Chr(n) & Chr(o) & _
Chr(p) & Chr(q) & Chr(r) & _
Chr(S) & Chr(t)

Next t: Next S: Next r: Next q
Next p: Next o: Next n: Next m
Next l: Next k: Next j: Next i
MsgBox "Sheet protection disabled."
End Sub

问题是:如何或为什么这样做? Chr(65)是A而Chr(66)是B而Chr(32)到Chr(126)是整个字母和特殊字符。

基本上,如果你想尝试所有可能性,你需要这样做:

Sub DisableSheetProtection()
    Dim password As String
    On Error Resume Next
    For i = 32 To 126: For j = 32 To 126
    For k = 32 To 126: For l = 32 To 126
    For m = 32 To 126: For n = 32 To 126
    For o = 32 To 126: For p = 32 To 126
    For q = 32 To 126: For r = 32 To 126
    For S = 32 To 126: For t = 32 To 126
    ActiveSheet.Unprotect Chr(i) & _
    Chr(j) & Chr(k) & Chr(l) & _
    Chr(m) & Chr(n) & Chr(o) & _
    Chr(p) & Chr(q) & Chr(r) & _
    Chr(S) & Chr(t)

    Next t: Next S: Next r: Next q
    Next p: Next o: Next n: Next m
    Next l: Next k: Next j: Next i
    MsgBox "Sheet protection disabled."
    End Sub

但代码工作正常,因为它是用于取消保护,您无法打印出正确的密码。我认为这与VBA unprotect / protect方法有关。

1 个答案:

答案 0 :(得分:4)

  

内部XL密码与组织一样有用   纸。原因是你输入的密码(即,用   不使用工具/保护/保护工作表或/保护工作簿   直接保护。   相反,他们是哈希(数学上   转换成一个安全性较低的代码。实际上,任何密码   将任何长度转换为12个字符的字符串,第一个   其中11个具有仅两个可能值中的一个。剩余的   字符最多可包含95个可能的值,仅导致

     

2 ^ 11 * 95 = 194,560个潜在密码

     

这可能看起来很多,但现代计算机只需几秒钟就可以尝试全部。作为比较,一个4个字符的密码只包含26个   小写字母字符有456,976种组合,和a   3个字符的密码,由小写,大写和   数字0-9将有238,328种组合。

     

同样,您的原始密码是什么并不重要,其中之一   194K字符串将解锁您的工作表或工作簿。

更多阅读this