【问题标题】:Easiest way to decrypt PGP-encrypted files from VBA (MS Access)从 VBA (MS Access) 解密 PGP 加密文件的最简单方法
【发布时间】:2010-09-13 10:25:42
【问题描述】:

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

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

【问题讨论】:

  • 生成密钥对大约是 PKE 中 90% 的难度...您必须学习 PKI、PKE 等才能完成此任务。但是您不必成为这方面的专家,只需很好地了解它是如何工作的......

标签: security ms-access encryption pgp


【解决方案1】:

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

【讨论】:

【解决方案2】:

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

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

【讨论】:

  • 这里有需要在Access中调用SHELL的问题,会异步运行。在这种情况下,您可以使用 Access Web mvps.org/access/api/api0004.htm 中的 ShellAndWait 代码。
【解决方案3】:

您可以为此使用OpenPGPBlackbox (ActiveX edition)

【讨论】:

    【解决方案4】:

    Stu...我曾经不得不用 Java 编写一个“安全 SMTP”服务器...最简单、最快捷的方法是下载和/或购买 PGP。他们有一个 SDK,你可以用它来访问任何你想要的东西。

    我必须回去看看我是否必须编写一个 COM 包装器,或者他们是否已经有了。 (大约 10 年前我写了这个 SMTP 服务器)。无论如何,不​​要气馁。大约 5 年前,我用 C++ 编写了一个完整的基于 PGP 的应用程序(基于 openPGP RFC),但问题是,我不允许使用任何现有的库。所以我不得不自己写所有这些东西。而且,我使用 GPG、OpenPGP 和 PGP 进行测试等......

    所以,我什至可以为您提供有关如何在 VBA 中解码这些内容的帮助。这不是不可能的,(它可能慢得要命,但并非不可能),而且我不是一个“为你掏出并运行 cmdline 的东西来为你做这样的工作,因为它会让你面临一些严重的安全风险, 因为 hurcane 的建议(例如)会导致您的密码短语显示给 ProcExp 等工具)。第一步是了解 PKE 的工作原理等。然后,您需要执行哪些步骤才能获得所需的内容。

    这是我有兴趣提供帮助的事情,因为我总是编写每个人都说无法完成的代码。 :) 另外,由于合并、关闭等原因,我拥有我编写的应用程序的源代码......

    它最初是为石油和天然气行业编写的,所以我知道它是安全的。这并不是说我的代码中没有ANY 安全漏洞,但我认为它是稳定的。我知道我的中文 Remainder Threory 代码有问题。由于某种原因,当我使用该快捷方式时,我无法正确解码数据,但如果我使用 RSA “long way”它可以工作...

    现在,这个应用程序从未完全完成,所以我不支持 DSA 密钥对之类的东西,但我支持 RSA 密钥对,使用 SHA1、MD5、使用 IDEA、AES,(我 THINK 我的 3DES 代码无法正常工作,但我可能已经修复了这个问题)。我还没有实现压缩,等等……但是,我很想有理由回去重新处理这段代码。

    我 /COULD/ 为您创建一个 COM 对象,您可以从 VBA 调用该对象,将原始 Base64 数据以及 Base64 密钥数据(或指向磁盘上的密钥文件的指针)以及用于解码文件的密码....

    考虑一下...告诉我..

    多年来,我收集了用于执行 MD5、SHA1、IDEA 和其他加密例程之类的 vbScript 代码,但我没有编写它们。天哪,您可能只需要与 Microsoft 的 CryptoAPI 交互,然后将每个操作分解为其核心部分,然后仍然可以正常工作。 (你不会找到像“DecryptPGP()”这样的 Micosoft CryptoAPI 调用......这一切都必须分块完成。

    如果我能帮忙,请告诉我。

    【讨论】:

      【解决方案5】:

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

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

      【讨论】:

        【解决方案6】:

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

        【讨论】:

          【解决方案7】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-04-29
            • 2023-03-17
            • 2019-02-12
            • 2018-05-22
            • 2020-12-13
            • 1970-01-01
            相关资源
            最近更新 更多