6

我发现在 Excel 2010(和 2007)中,当您尝试选择一种更安全的加密类型时,它似乎会默默地忽略您的设置,例如在解密时留下一个可以在几秒钟内破解的文件

这不适用于默认为 AES 加密的新文件格式,仅当您保存为 97-2003 格式时。

这是我在工作簿中创建的宏:

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

通过省略 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

然后,decryptum 无法像我预期的那样解密。

我做错了什么还是这是一个错误?如果它是一个错误,我该如何解决它?

我在下面为 Excel 2010 添加了各种解决方案,但我希望有一些更简单的东西,最好是也适用于 2007 年的东西。

4

2 回答 2

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

您可能会看到 1) Office Standard、2) False、3) 40和 4) Office的值。这意味着没有使用 RC4。加密默认为标准 - 和糟糕/旧 - Excel 加密。显然 RC4 也被 MSFT 认为是非常糟糕的,所以在较新的 Office 客户端中使用它有点困难。

见这两篇文章:

脚注:例程的FileFormat部分在SaveAs这里不是罪魁祸首。它只是在做 CryptoAPI 告诉它做的事情。实际上,从 Excel 2010 VBA 开始,您可以使用 Excel 2003 的SaveAs,这略有不同,但不会有任何区别(从 Excel 2010 开始,它是一个隐藏的例程,可以像 一样访问ActiveWorkbook.[_SaveAs] Filename:="encryption_test.xls", Password:="password"。)

于 2011-02-25T10:14:54.817 回答
3

Office 2010 的解决方法:

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