6 encryption excel vba ms-office office-2010
我发现在Excel 2010(和2007)中,当您尝试选择一种更安全的加密类型时,它似乎默默地忽略您的设置,为您留下一个文件,例如在解密时可以在几秒钟内破解.
仅当您保存为97-2003格式时,这不适用于默认情况下AES加密的新文件格式.
这是我在工作簿中创建的宏:
Sub enc()
Me.SetPasswordEncryptionOptions _
PasswordEncryptionProvider:= "Microsoft Strong Cryptographic Provider", _
PasswordEncryptionAlgorithm:= "RC4", _
PasswordEncryptionKeyLength:=128, _
PasswordEncryptionFileProperties:=True
Me.SaveAs _
Filename:="encryption_test.xls", _
FileFormat:=xlExcel8, _
Password:="password"
End Sub
Run Code Online (Sandbox Code Playgroud)
通过省略FileFormat参数,可以很容易地使用这些加密设置使Excel 2003(正确)输出:
Sub enc()
Me.SetPasswordEncryptionOptions _
PasswordEncryptionProvider:= "Microsoft Strong Cryptographic Provider", _
PasswordEncryptionAlgorithm:= "RC4", _
PasswordEncryptionKeyLength:=128, _
PasswordEncryptionFileProperties:=True
Me.SaveAs _
Filename:="encryption_test.xls", _
Password:="password"
End Sub
Run Code Online (Sandbox Code Playgroud)
然后,decryptum无法像我期望的那样解密.
我做错了什么或这是一个错误?如果它是一个错误,我该如何解决它?
我在下面为Excel 2010添加了各种解决方案,但我希望有一些更简单的东西,最好是适用于2007的东西.
这是因为RC4未启用Office 2007/2010 - 您必须手动完成您使用管理模板执行的操作.
为了证明这一点,在Excel 2010中,执行上面的例程,然后打开"encryption_test.xls"文件并按Alt+ F11转到VBE.然后运行以下命令(按Ctrl+ 键G先打开立即窗口):
Sub CheckEncryption()
Dim aw As Workbook: Set aw = ActiveWorkbook
With aw
Debug.Print .PasswordEncryptionAlgorithm
Debug.Print .PasswordEncryptionFileProperties
Debug.Print .PasswordEncryptionKeyLength
Debug.Print .PasswordEncryptionProvider
End With
End Sub
Run Code Online (Sandbox Code Playgroud)
您可能会看到的值是1)Office Standard,2)False,3)40和4)Office.这意味着RC4没有被使用; 加密默认为标准 - 和crummy/old - Excel加密.显然RC4被MSFT认为是非常糟糕的,所以在新的Office客户端中使用它有点蹒跚.
看到这两篇文章:
脚注:例程的FileFormat一部分SaveAs不是罪魁祸首.它只是在做CryptoAPI告诉它要做的事情.实际上,从Excel 2010 VBA开始,您可以使用Excel 2003 SaveAs,它略有不同,并没有什么区别(从Excel 2010开始,它是一个可以像访问一样的隐藏例程ActiveWorkbook.[_SaveAs] Filename:="encryption_test.xls", Password:="password".)
小智 3
Office 2010 的解决方法: