代码之家  ›  专栏  ›  技术社区  ›  stucampbell

从VBA(MS Access)解密PGP加密文件的最简单方法

  •  3
  • stucampbell  · 技术社区  · 16 年前

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

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

    7 回复  |  直到 14 年前
        1
  •  5
  •   hurcane    16 年前

    命令行解决方案很好。如果您的数据库是一个内部应用程序,不需要重新分发,我可以建议您 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
  •  3
  •   Bob Probst    16 年前

    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
    

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

        3
  •  3
  •   Eugene Mayevski 'Callback    16 年前
        4
  •  3
  •   GEOCHET S.Lott    15 年前

    Stu…我曾经在爪哇写过一个“安全SMTP”服务器…最简单、最快捷的方法是下载和/或购买PGP。他们有一个SDK,您可以使用它访问任何您想要的东西。

    我得回去看看我是否需要写一个COM包装器,或者他们是否已经有了一个。(大约10年前我写了这个SMTP服务器)。无论如何,不要泄气。大约5年前,我在C++中编写了一个基于PGP的应用程序(基于OpenPGP RFC),但捕获的是,我是 不是 允许使用任何现有库。所以我必须自己写这些东西。我用gpg、openpgp和pgp进行测试等等。

    所以,我甚至可以为您提供如何在VBA中解码这些内容的帮助。这不是不可能的,(这可能会很慢,但也不是不可能的),我不是一个“空出去运行命令行的东西来为你做这样的工作的人,因为它会给你带来一些严重的安全风险,因为Hurkan的建议(例如)会使你的密码显示在ProcExp这样的工具上。”第一步是学习pke是如何工作的,等等。然后,你需要做的步骤才能得到你想要的。

    这是我会感兴趣的帮助,因为我总是一个写代码,每个人都说不能做。:)另外,由于合并、关闭等原因,我拥有自己编写的应用程序的源代码。

    它最初是为石油和天然气工业写的,所以我知道它是安全的。不是说我没有 任何 代码中存在安全缺陷,但我认为它是稳定的。我知道我的中文剩余三元代码有问题。由于某种原因,当我使用这个快捷方式时,我无法正确地解码数据,但是如果我使用RSA“long way”,它会起作用…

    现在,这个应用程序从未完全完成,所以我不支持像DSA密钥对这样的东西,但我确实支持RSA密钥对,使用sha1、md5、using idea、aes,(i) 思考 我的3DES代码不能正常工作,但我可能已经修复了它)。我还没有实现压缩等等…但是,我希望有一个理由可以回去重新编写这段代码。

    我/可以/使您成为一个COM对象,您可以从vba调用该对象,将原始base64数据连同base64密钥数据(或指向磁盘上密钥文件的指针)一起传入,以及用于解码文件的密码库….

    想想看…让我知道…

    多年来,我收集了vbscript代码用于执行MD5、SHA1、IDEA和其他加密例程,但我没有编写它们。该死的,你可能只需要与微软的CryptoAPI接口,然后将每个操作分解成它的核心部分,然后继续工作。(您将找不到类似“decryptpgp()”的MicoSoft CryptoAPI调用。)所有的工作都必须分块进行)。

    让我知道我是否能帮忙。

        5
  •  1
  •   Birger    16 年前

    我将寻找一个命令行加密/解密程序,只需从您的访问应用程序中调用带有正确参数的exe。

    我知道在VBA中没有PGP加密/解密程序。

        6
  •  1
  •   cleg    16 年前

    对于访问,我不熟悉vba,但我认为最好的解决方案(也许最简单)是运行外部命令行pgp实用程序。

        7
  •  1
  •   Oli    16 年前

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