And*_*ite 15 encryption excel vba excel-vba
这段代码已经在网上漂浮了很多年 - 它显然能够提供密码来解密你不知道密码的excel电子表格.
http://www.theofficeexperts.com/VBASamples/Excel02.htm
我对它是如何工作感兴趣,但我似乎无法解决这个问题.我假设它是在某个值下加密的,可以通过多种方式获得(网上的一些地方说它会给你原始密码或另一个可以工作的密码)有点像公钥 - 你可以有100个公钥,所有公钥都可以使用一个私钥.
对我来说,似乎它正在创建整数变量并用特定数字填充它们,然后将该数字转换为相关字符.这些总是不一样吗?如果是这样,Excel保护是否有"主密码"?
谢谢大家!
编辑:我注意到我发布的示例代码中的For n = 32 To 126.使用ASCII表进行交叉引用,该表似乎是从空间到波浪号的所有字符.这是某种字典攻击我不理解语法吗?
bre*_*tdj 22
这是一个小世界,因为代码表明我在大约10年前在另一个论坛上发布了这个代码,在其他地方看过它 - 我想在John Walkenbach的旧网站上
请务必注意,此代码保护仅适用于工作表保护 - 而不适用于Excel的文件打开或VBA密码.

Tor*_*ein 11
引人入胜 - 我之前知道代码片段,但不知道brettdj发布的解释.正如其他人所解释的那样,它是对哈希冲突的蛮力搜索.实际上它似乎是通过反复试验制作的,因为它做了比必要工作更多的工作(生成了194560个组合,但是只有32768个哈希值可能.)
简而言之Excel的哈希算法(如http://chicago.sourceforge.net/devel/docs/excel/encrypt.html中所述):
知道这一点,人们可以设计如下的蛮力搜索:
最简单的方法是使用11个字符的密码并将计数器放在位置1,6和11处.步骤2中的位移以正确的方式对齐计数器位:第一个计数器("x")移位1位,第二个("y")6位,第三个("z")11位.在散列的按位表示中,计数器会影响以下位:
bit: 76543210 76543210
cnt: -zzzzyyy yyxxxxxz
Run Code Online (Sandbox Code Playgroud)
由于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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18788 次 |
| 最近记录: |