3

我需要编写从 FTP 位置获取 PGP 加密文件并处理它们的代码。这些文件将使用我的公钥加密(我还没有)。显然,我需要一个可以在 Microsoft Access 中使用的 PGP 库。能推荐一款好用的吗?

我正在寻找不需要大量 PKI 知识的东西。理想情况下,可以轻松生成一次性私钥/公钥对,然后有一个简单的解密例程。

4

7 回答 7

5

命令行解决方案很好。如果您的数据库是一个内部应用程序,而不是重新分发,我可以推荐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 支持其他技术来保护密码。

于 2008-09-26T13:27:45.843 回答
3

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

希望能为您指明一个有用的方向。

于 2008-09-26T12:33:39.373 回答
3

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 调用......这一切都必须分块完成)。

让我知道我是否可以提供帮助。

于 2008-12-19T23:14:01.070 回答
3

您可以为此使用OpenPGPBlackbox (ActiveX 版本)

于 2008-12-20T08:33:45.633 回答
1

我会寻找一个命令行加密器/解密器,然后使用正确的参数从您的 Access 应用程序中调用 exe。

据我所知,VBA 中没有 PGP 加密器/解密器。

于 2008-09-26T12:27:55.050 回答
1

我不熟悉 VBA for Access,但我认为最好的解决方案(也许是最简单的)是运行外部命令行 PGP 实用程序。

于 2008-09-26T12:33:05.083 回答
1

您可以直接从 VBA 应用程序调用一个 DLL,而无需跨越外部程序: CryptoCX。PGP 还有一个可以调用的 DLL。

于 2008-09-26T12:43:17.633 回答