Самый простой способ расшифровать файлы, зашифрованные PGP, из VBA (MS Access)
-
02-07-2019 - |
Вопрос
Мне нужно написать код, который получает файлы, зашифрованные в PGP, из расположения FTP и обрабатывает их.Файлы будут зашифрованы с помощью моего открытого ключа (хотя у меня его пока нет).Очевидно, что мне нужна библиотека PGP, которую я могу использовать из Microsoft Access.Можете ли вы порекомендовать что-нибудь простое в использовании?
Я ищу что-то, что не требует огромных знаний PKI.В идеале, что-то, что легко сгенерирует одноразовую пару закрытого / открытого ключей, а затем будет иметь простую процедуру расшифровки.
Решение
Решение из командной строки - это хорошо.Если ваша база данных является внутренним приложением, не подлежащим распространению, я могу порекомендовать Защита конфиденциальности Gnu.Этот инструмент на основе командной строки позволит вам делать все, что вам нужно, в соответствии со стандартом 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 поддерживает другие методы защиты ключевой фразы.
Другие советы
В 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
Надеюсь, это укажет вам полезное направление.
Вы можете использовать OpenPGPBlackbox (версия ActiveX) для этого
Стю...Однажды мне пришлось написать "Защищенный SMTP"-сервер на Java...Самый простой и быстрый способ сделать это - загрузить и / или приобрести PGP.У них есть SDK, который вы можете использовать для доступа ко всему, что захотите.
Мне пришлось бы вернуться и посмотреть, нужно ли мне писать COM-оболочку, или она у них уже есть.(Я написал этот SMTP-сервер около 10 лет назад).В любом случае, не отчаивайтесь.Около 5 лет назад я написал целое приложение на основе PGP (основанное на OpenPGP RFC) на C ++, но загвоздка была в том, что я был НЕТ разрешено использовать любые существующие библиотеки.Так что мне пришлось писать все это самому.И я использовал GPG, OpenPGP и PGP для тестирования и т.д....
Итак, я мог бы даже оказать вам помощь в том, как расшифровать этот материал в VBA.Это не невозможно (это может быть чертовски медленно, но не невозможно), и я НЕ из тех, кто "раскошеливается" и запускает материал cmdline, чтобы выполнить подобную работу за вас, поскольку это подвергнет вас некоторым СЕРЬЕЗНЫМ рискам безопасности, поскольку предложение hurcane (например) приведет к отображению вашей ключевой фразы в таких инструментах, как ProcExp).Первый шаг - это изучение того, как работает PKE и т.д.Затем перечислите шаги, которые вам нужно сделать, чтобы получить то, что вы хотите.
Это то, с чем мне было бы интересно помочь, поскольку я всегда из тех, кто пишет код, который, по всеобщему мнению, невозможно выполнить.:) Кроме того, у меня есть исходный код приложения, которое я написал, из-за слияний, закрытий и т.д...
Изначально она была написана для нефтегазовой промышленности, поэтому я знаю, что она безопасна.Это не значит, что у меня нет Любой в коде есть недостатки в безопасности, но я думаю, что он стабилен.Я знаю, что у меня проблема с моим китайским кодом остатка..По какой-то причине, когда я использую этот короткий путь, я не могу правильно декодировать данные, но если я использую RSA "длинный путь", это работает...
Это приложение так и не было полностью завершено, поэтому я не поддерживаю такие вещи, как пары ключей DSA, но я поддерживаю пары ключей RSA с SHA1, MD5, используя IDEA, AES, (I ПОДУМАЙ мой код 3DES работает некорректно, но, возможно, с тех пор я это исправил).Я еще не реализовал сжатие и т.д...Но мне бы хотелось иметь повод вернуться и снова поработать над этим кодом.
Я / МОГ БЫ / создать для вас COM-объект, который вы могли бы вызывать из VBA, передавая исходные данные Base64 вместе с ключевыми данными Base64 (или указателем на ключевой файл на диске) и парольную фразу для декодирования файлов....
Подумай об этом...Дай мне знать..
На протяжении многих лет я собирал код VBScript для выполнения таких вещей, как MD5, SHA1, IDEA и других криптопрограмм, но я их не писал.Черт возьми, вы, вероятно, могли бы просто взаимодействовать с Microsoft CryptoAPI и разбивать каждое действие на его основные части и при этом заставлять его работать.(Вы не найдете вызова Micosoft CryptoAPI типа "DecryptPGP()"...Все это нужно было бы делать по частям).
Дай мне знать, если я смогу помочь.
Я бы поискал средство шифрования / дешифрования командной строки и просто вызвал exe-файл из вашего приложения Access с нужными параметрами.
Насколько я знаю, в VBA нет PGP-шифровальщика / дешифровальщика.
Я не знаком с VBA для Access, но я думаю, что лучшим решением (возможно, самым простым) было бы запустить внешнюю утилиту PGP командной строки.
Существует библиотека DLL, которую вы можете вызвать непосредственно из вашего приложения VBA, не обращаясь к внешней программе: КриптоКС.У PGP также есть библиотека DLL, которую вы можете вызвать.