Самый простой способ расшифровать PGP-зашифрованные файлы из VBA (MS Access) - PullRequest
3 голосов
/ 26 сентября 2008

Мне нужно написать код, который берет файлы, зашифрованные PGP, с FTP-узла и обрабатывает их. Файлы будут зашифрованы моим открытым ключом (но у меня его еще нет). Очевидно, мне нужна библиотека PGP, которую я могу использовать из Microsoft Access. Можете ли вы порекомендовать тот, который прост в использовании?

Я ищу что-то, что не требует огромного количества знаний PKI. В идеале, это то, что будет легко генерировать одноразовую пару личного / открытого ключа, а затем иметь простую процедуру для расшифровки.

Ответы [ 7 ]

5 голосов
/ 26 сентября 2008

Решение для командной строки хорошо. Если ваша база данных является внутренним приложением, которое нельзя распространять, я могу порекомендовать Gnu Privacy Guard . Этот инструмент на основе командной строки позволит вам делать все, что вам нужно в отношении стандарта OpenPGP.

В Access вы можете использовать команду Shell () в макросе следующим образом:

Public Sub DecryptFile(ByVal FileName As String)
  Dim strCommand As String
  strCommand = "C:\Program Files\GNU\GnuPG\gpg.exe " _
  & "--batch --passphrase ""My PassPhrase that I used""" & FileName
  Shell strCommand, vbNormalFocus
End Sub

Это запустит инструмент командной строки для расшифровки файла. Этот синтаксис использует незашифрованную версию вашей секретной парольной фразы. Это не самое безопасное решение, но допустимо, если ваша база данных является внутренней и используется только доверенным персоналом. GnuPG поддерживает другие методы защиты парольной фразы.

3 голосов
/ 20 декабря 2008

Вы можете использовать OpenPGPBlackbox (версия ActiveX) для этого

3 голосов
/ 20 декабря 2008

Stu ... Мне когда-то приходилось писать сервер "Secure SMTP" на Java ... Самый простой и быстрый способ сделать это - загрузить и / или купить PGP. У них есть SDK, который вы можете использовать для доступа ко всему, что захотите.

Я должен был бы вернуться и посмотреть, должен ли я написать обертку COM или она уже была. (Я написал этот SMTP-сервер около 10 лет назад). В любом случае, не расстраивайтесь. Около 5 лет назад я написал целое приложение на основе PGP (на основе openPGP RFC) на C ++, но подвох был в том, что мне было НЕ разрешено использовать любые существующие библиотеки. Таким образом, я должен был написать все это сам. И я использовал GPG, OpenPGP и PGP для тестирования и т.д ....

Итак, я мог бы даже помочь вам с тем, как декодировать этот материал в VBA. Это не невозможно, (это может быть чертовски медленно, но не невозможно), и я НЕ из тех, кто "выкладывает и запускает команды cmdline, чтобы сделать такую ​​работу для вас, так как это откроет вам некоторые СЕРЬЕЗНЫЕ угрозы безопасности , как предложение урагана (например) приведет к отображению вашей парольной фразы в таких инструментах, как ProcExp). Первым шагом является изучение работы PKE и т. д. Затем, шаги, которые необходимо сделать, чтобы получить то, что вы хотите.

Это то, с чем мне было бы интересно помочь, так как я всегда один, чтобы писать код, который, как все говорят, не может быть сделан. :) Кроме того, я владею исходным кодом написанного мною приложения из-за слияний, замыканий и т. Д. *

Первоначально он был написан для нефтегазовой промышленности, поэтому я знаю, что он безопасен. Это не значит, что в коде нет ANY недостатков безопасности, но я думаю, что он стабилен. Я знаю, что у меня есть проблема с моим китайским кодом Remainder Threory. По какой-то причине, когда я использую этот ярлык, я не могу правильно декодировать данные, но если я использую «длинный путь» RSA, это работает ...

Теперь, это приложение никогда не было полностью завершено, поэтому я не поддерживаю такие вещи, как пары ключей DSA, но я поддерживаю пары ключей RSA с SHA1, MD5, используя IDEA, AES, (I THINK мой код 3DES не работает правильно, но я, возможно, исправил это с тех пор). Я еще не реализовал сжатие и т. Д. Но я хотел бы найти причину вернуться и снова поработать над этим кодом.

I / COULD / делает вас COM-объектом, который вы можете вызывать из VBA, передавая исходные данные Base64 вместе с данными ключа Base64 (или указателем на файл ключа на диске) и passpsshrase для декодирования файлов ....

Подумай об этом ... Дай мне знать ..

За прошедшие годы я собрал код vbScript для таких вещей, как MD5, SHA1, IDEA и другие крипто-подпрограммы, но я их не писал. Черт, вы, вероятно, могли бы просто взаимодействовать с CryptoAPI от Microsoft, разбивать каждое действие на его основные части и все же заставить его работать. (Вы не найдете вызов Micosoft CryptoAPI, такой как «DecryptPGP ()» ... Все это должно быть выполнено кусками).

Дай мне знать, смогу ли я помочь.

3 голосов
/ 26 сентября 2008

PGP имеет параметр командной строки для расшифровки файлов.

У нас есть пакетный файл, который выполняет расшифровку, передавая имя файла для расшифровки:

Пакетный файл:

"C:\Program Files\Network Associates\PGPNT\pgp" +FORCE %1 -z *password* 

Мы звоним из VBS:

  Command = "decrypt.bat """ & FolderName & FileName & """"

  'Executes the command script.
  Set objShell = WScript.CreateObject ("WSCript.shell")
  Command = "cmd /c " & Command
  objShell.run Command, 1, True

Надеюсь, это укажет вам полезное направление.

1 голос
/ 26 сентября 2008

Существует DLL, которую вы можете вызвать напрямую из вашего приложения VBA без необходимости использовать внешнюю программу: CryptoCX . У PGP также есть библиотека DLL, которую вы можете вызвать.

1 голос
/ 26 сентября 2008

Я не знаком с VBA для Access, но я думаю, что лучшим решением (возможно, самым простым) будет запускать внешнюю утилиту командной строки PGP.

1 голос
/ 26 сентября 2008

Я бы искал шифровальщик / расшифровщик командной строки и просто вызывал exe из вашего приложения Access с правильными параметрами.

В VBA нет ни одного шифратора / дешифратора PGP, о котором я знаю.

...