Vba 如何使用Excel';s工作表密码保护工作
这段代码已经在网上流传了好几年了——它显然能够提供一个密码,用于解密您不知道密码的excel电子表格 我对它的工作原理很感兴趣,但我似乎无法解决它。我假设它是在一个特定的值下加密的,这个值可以通过多种方式获得(网络上的一些地方说它会给你原始密码或另一个可以工作的密码),有点像公钥——你可以有100个公钥,所有这些公钥都可以与一个私钥一起工作 在我看来,它似乎是在创建整数变量并用特定的数字填充它们,然后再将该数字转换为相关字符。这些不都是一样的吗?如果是,是否有Excel保护的“主密码” 谢谢大家Vba 如何使用Excel';s工作表密码保护工作,vba,encryption,excel,Vba,Encryption,Excel,这段代码已经在网上流传了好几年了——它显然能够提供一个密码,用于解密您不知道密码的excel电子表格 我对它的工作原理很感兴趣,但我似乎无法解决它。我假设它是在一个特定的值下加密的,这个值可以通过多种方式获得(网络上的一些地方说它会给你原始密码或另一个可以工作的密码),有点像公钥——你可以有100个公钥,所有这些公钥都可以与一个私钥一起工作 在我看来,它似乎是在创建整数变量并用特定的数字填充它们,然后再将该数字转换为相关字符。这些不都是一样的吗?如果是,是否有Excel保护的“主密码” 谢谢大
编辑:在我发布的示例代码中,我注意到了n=32到126之间的差异。与ASCII表的交叉引用,该表似乎是从空格到平铺的所有字符。这是一种由于语法原因我不理解的字典攻击吗?只是一个猜测,但在我看来,如果密码通过某种哈希函数运行是有效的,它会产生非常小的结果范围,并将其与存储的哈希值进行比较,这就像Excel测试一样 假定这个函数正在测试所有这些值,直到找到一个有效的值为止。根据使用的值判断,哈希函数生成2^11*(126-31)个不同的值,所有这些值都可以由该代码中生成的值生成
我的分析假设这一常规有效。我还没有测试过。代码使用加密密码aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa。找到密码后,会在消息框中显示密码 当然,这意味着它只检查长度正好为12个字符且仅由大写字母A(ASCII 65)和B(ASCII 66)后跟一个可打印ASCII字符组成的密码@mkingston测试2^11*(126-31)个不同的值是正确的。但是没有哈希函数。我不认为这会破坏很多电子表格。你最好用它
有关ActiveSheet.Protect和ActiveSheet.Unprotect的更多详细信息,请参阅。这是一个小世界,因为代码表明我大约10年前在另一个论坛上发布了该代码,在其他地方看到过它-我想是在旧网站上 需要注意的是,此代码保护仅适用于工作表保护,而不适用于Excel的文件打开密码或VBA密码。
- 这篇文章完整的一个例子是(下面的屏幕截图)
- 谷歌
提供了其他类似的参考excel表单保护“test”和“zzyw”
- 解压缩
或.xlsx
文件.xlsm
- 编辑
xl/worksheets/sheet.xml
- 搜索并删除
标记 - 保存,再次压缩,享受
- 最高位始终为零,因此有15位需要测试
- 将它们分成三个计数器,每个计数器覆盖5位。这样,每个计数器都可以表示一个可打印的ascii字符
- 将这些计数器的ascii表示形式打包为密码字符串,这样它们就不会相互影响
bit: 76543210 76543210
cnt: -zzzzyyy yyxxxxxz
XOR操作可以忽略,因为XOR参数始终是常量。出于同样的原因,可以添加恒定偏移量(例如64)。另外,在其他密码字节(2-5、7-10)上使用什么字符也无关紧要
通过迭代所有可能的x、y、z组合,您最终会找到一个密码,该密码给出与原始密码相同的哈希值
Public Sub demo()
' http://stackoverflow.com/questions/12852095/how-does-excels-worksheet-password-protection-work
Dim x As Integer, y as Integer, z as Integer
Dim part1 As String, part12 As String
Dim sh As Worksheet
Set sh = ThisWorkbook.Worksheets(1)
sh.Protect "$ome_Insanely_Long_and_c0mplex_password! [(which i$ imp*ssible t0 re-member)]"
For x = 64 To 95
' pad with dots, so that x, y and z affect nonoverlapping bits of the hash.
part1 = Chr(x) + "...."
For y = 64 To 95
part12 = part1 + Chr(y) + "...."
For z = 64 To 95
On Error Resume Next
sh.Unprotect part12 + Chr(z)
If Err.Number = 0 Then
Debug.Print "Password: '" & part12 + Chr(z) & "'"
Exit Sub
End If
On Error GoTo 0
Next
Next
Next
End Sub
旧式office文档格式中的密码保护使用了与湿T恤相当的加密技术:“有盖,但一切仍然可见”。它从来就不是为了“安全”。如果您想要安全性,那么较新的“x”版本确实使用了更好的加密,并且更难进入。@MarcB太真实了-喜欢这个评论office文件中没有主密钥。所使用的算法非常容易破解(例如,elcomsoft的office密码恢复应用程序可能会获得旧密码)
Sub FindPassword()
'Breaks worksheet password protection.
Dim i As Integer, j As Integer, k As Integer
Dim l As Integer, m As Integer, n As Integer
Dim i1 As Integer, i2 As Integer, i3 As Integer
Dim i4 As Integer, i5 As Integer, i6 As Integer
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 i1 = 65 To 66
For i2 = 65 To 66: For i3 = 65 To 66: For i4 = 65 To 66
For i5 = 65 To 66: For i6 = 65 To 66: For n = 32 To 126
ActiveSheet.Unprotect Chr(i) & Chr(j) & Chr(k) & _
Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & Chr(i3) & _
Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)
If ActiveSheet.ProtectContents = False Then
MsgBox "One usable password is " & Chr(i) & Chr(j) & _
Chr(k) & Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & _
Chr(i3) & Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)
Exit Sub
End If
Next: Next: Next: Next: Next: Next
Next: Next: Next: Next: Next: Next
End Sub