Как создать надежно защищенные паролем файлы .xls в Excel 2010 из VBA - PullRequest
6 голосов
/ 22 февраля 2011

Я обнаружил, что в Excel 2010 (и 2007), когда вы пытаетесь выбрать один из более безопасных типов шифрования, кажется, что он молча игнорирует ваши настройки, оставляя вам файл, который может быть взломан за считанные секунды при decryptum , например.

Это не относится к новым форматам файлов, которые по умолчанию шифруются 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

Очень легко заставить Excel 2003 (правильно) выводить данные параметры шифрования, пропустив параметр FileFormat:

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 год..

Ответы [ 2 ]

8 голосов
/ 25 февраля 2011

Это потому, что RC4 не включен в Office 2007/2010 - вам придется вручную делать то же, что вы делаете с шаблоном администратора.

Чтобы доказать это, в Excel 2010 выполнитеподпрограмма выше, а затем откройте файл «encryption_test.xls» и нажмите Alt + F11 , чтобы перейти к VBE.Затем выполните следующее (нажмите Ctrl + G , чтобы сначала открыть окно Immediate):

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) Офисный стандарт , 2) Ложь , 3) 40 и 4) Офис .Это означает, что RC4 не используется;Шифрование по умолчанию стандартное - и грубое / старое - шифрование Excel.Очевидно, что RC4 также считается довольно отвратительным в MSFT, поэтому его использование было немного затруднено в новых клиентах Office.

См. Эти две статьи:

Сноска : FileFormat часть процедуры SaveAs здесь не является преступником.Он делает только то, что говорит CryptoAPI.Фактически, из Excel 2010 VBA вы можете использовать Excel 2003 SaveAs, который немного отличается и не будет иметь значения (в Excel 2010 это скрытая подпрограмма, к которой можно получить доступ, например, ActiveWorkbook.[_SaveAs] Filename:="encryption_test.xls", Password:="password".)

3 голосов
/ 22 февраля 2011

Обходной путь для Office 2010:

  1. добавить административный шаблон office 2010 (office14.adm)
  2. изменить "Конфигурация пользователя \ Административные шаблоны \ Microsoft Office 2010 \ Параметры безопасности \ Тип шифрования для защищенных паролем файлов Office 97-2003" в "Microsoft Strong Cryptographic Provider, RC4,128" (без кавычек)
...