从VBA解密PGP加密文件的最简单方法(MS Access)
我需要编写代码来从FTP位置提取PGP加密的文件并进行处理。这些文件将使用我的公共密钥加密(不是我还没有)。显然,我需要一个可以在Microsoft Access中使用的PGP库。我们能推荐一种易于使用的工具吗?
我正在寻找不需要大量PKI知识的东西。理想情况下,可以轻松生成一次性的私钥/公钥对,然后具有用于解密的简单例程的事物。
解决方案
我将寻找一个命令行加密器/解密器,然后使用正确的参数从Access应用程序中调用该exe。
我知道VBA中没有PGP加密器/解密器。
我不熟悉Access的VBA,但我认为最好的解决方案(也许是最简单的)将是运行外部命令行PGP实用程序。
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
希望这为我们指明了一个有用的方向。
我们可以直接从VBA应用程序中调用一个DLL,而无需使用外部程序CryptoCX。 PGP还有一个可以调用的DLL。
命令行解决方案是好的。如果数据库是内部应用程序,而不是要重新分发,则我建议使用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支持其他保护密码短语的技术。
Stu ...我曾经不得不用Java编写" Secure SMTP"服务器。最简单,最快的方法是下载和/或者购买PGP。他们有一个SDK,我们可以使用它来访问所需的任何内容。
我必须回去看看是否必须编写一个COM包装器,或者他们是否已经有一个。 (我大约在10年前编写了此SMTP服务器)。无论如何,不要灰心。大约5年前,我用C ++编写了一个完整的基于PGP的应用程序(基于openPGP RFC),但是要注意的是,我不被允许使用任何现有的库。所以我必须自己写所有这些东西。而且,我使用GPG,OpenPGP和PGP进行测试等。
因此,我什至可以为我们提供有关如何在VBA中解码这些内容的帮助。这不是不可能的,(它可能会慢下来,但并非不可能),而且我也不是"炮轰并运行cmdline的东西来为我们做这样的事情,因为它会使我们面临严重的安全风险,例如hurcane的建议将使密码短语显示在ProcExp之类的工具中。第一步是学习PKE的工作原理,等等,然后执行所需的步骤以获取所需的内容。
我一直乐于提供帮助,因为我总是写每个人都说无法完成的代码。 :)另外,由于合并,关闭等原因,我拥有我编写的应用程序的源代码。
它最初是为石油和天然气行业编写的,因此我知道它是安全的。这并不是说代码中没有任何安全漏洞,但我认为它很稳定。我知道我的剩余中文代码有问题。出于某种原因,当我使用该快捷方式时,我无法正确解码数据,但是如果我使用RSA"长途",它就可以工作...
现在,此应用程序从未完全完成,因此我不支持DSA密钥对之类的东西,但是我确实支持RSA密钥对,以及SHA1,MD5,IDEA,AES(我认为3DES代码无法正常工作) ,但自那以后我可能已经解决了)。我还没有实现压缩,等等。但是,我很乐意返回并再次处理此代码。
我/ COULD /为我们提供一个COM对象,我们可以从VBA调用该对象,并将原始的Base64数据与Base64密钥数据(或者指向磁盘上的密钥文件的指针)一起传递,并使用passpsshrase解码文件... 。
考虑一下...让我知道..
多年来,我收集了用于执行MD5,SHA1,IDEA和其他加密例程之类的功能的vbScript代码,但我没有编写它们。天哪,我们可能只需要与Microsoft的CryptoAPI交互,并将每个操作分解为它的核心部分,然后仍然可以使它起作用。 (我们不会找到像" DecryptPGP()"这样的Micosoft CryptoAPI调用。。。所有这些操作都必须分块完成)。
莱姆知道我能不能帮上忙。
我们可以为此使用OpenPGPBlackbox(ActiveX版)