Самый простой способ расшифровать файлы, зашифрованные PGP, из VBA (MS Access)

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

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


person stucampbell    schedule 26.09.2008    source источник
comment
Генерация KeyPair составляет около 90% сложности в PKE... Вам придется изучить PKI, PKE и т. д., чтобы осуществить это. Но вам не обязательно становиться в этом экспертом, достаточно хорошо понимать, как все это работает...   -  person LarryF    schedule 20.12.2008


Ответы (7)


Решение с командной строкой — это хорошо. Если ваша база данных является внутренним приложением, не подлежащим дальнейшему распространению, я могу порекомендовать 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 поддерживает другие методы защиты парольной фразы.

person hurcane    schedule 26.09.2008
comment
Чтобы запустить это синхронно, а не асинхронно (поскольку код выше будет выполняться), попробуйте ShellAndWait: mvps .org/access/api/api0004.htm . - person David-W-Fenton; 26.09.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

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

person Bob Probst    schedule 26.09.2008
comment
Это связано с необходимостью вызывать SHELL в Access, который будет работать асинхронно. В этом случае вы можете использовать код ShellAndWait из Access Web, mvps.org/access. /api/api0004.htm . - person David-W-Fenton; 26.09.2008

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

person Eugene Mayevski 'Callback    schedule 20.12.2008

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

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

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

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

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

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

Я /МОГУ/ сделать вам COM-объект, который вы могли бы вызывать из VBA, передавая исходные данные Base64 вместе с данными ключа Base64 (или указателем на файл ключа на диске) и passpshrase для декодирования файлов... .

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

На протяжении многих лет я собирал код vbScript для выполнения таких операций, как MD5, SHA1, IDEA и других криптографических подпрограмм, но я их не писал. Черт, вы, вероятно, могли бы просто взаимодействовать с Microsoft CryptoAPI и разбивать каждое действие на его основные части и все равно заставить его работать. (Вы не найдете такой вызов Microsoft CryptoAPI, как "DecryptPGP()"... Все это нужно делать по частям).

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

person LarryF    schedule 19.12.2008

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

Насколько я знаю, в VBA нет шифратора/дешифратора PGP.

person Birger    schedule 26.09.2008

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

person cleg    schedule 26.09.2008

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

person Oli    schedule 26.09.2008