如何从VBA在Excel 2010中创建安全的受密码保护的.xls文件

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的东西.

Tod*_*ain 8

这是因为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 的解决方法:

  1. 添加 Office 2010 管理模板 (office14.adm)
  2. 将“用户配置\管理模板\Microsoft Office 2010\安全设置\受密码保护的 Office 97-2003 文件的加密类型”编辑为“Microsoft Strong Cryptographic Provider,RC4,128”(不带引号)