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