2008-09-26 146 views
2

我需要編寫從FTP位置獲取PGP加密文件並處理它們的代碼。這些文件將使用我的公鑰進行加密(不是我還有)。顯然,我需要一個PGP庫,我可以在Microsoft Access中使用它。你能推薦一個易於使用的嗎?從VBA(MS Access)解密PGP加密文件的最簡單方法

我正在尋找一些不需要大量PKI知識的東西。理想情況下,這將很容易生成一次性私鑰/公鑰對,然後有一個簡單的解密例程。

+0

生成密鑰對在PKE難度的約90%...你將不得不學習的PKI,PKE等以拉這一關。但是,您不必成爲專家,只需很好地瞭解它是如何工作的... – LarryF 2008-12-19 23:18:16

回答

4

命令行解決方案很好。如果您的數據庫是內部應用程序,不要重新分配,我可以推薦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支持其他技術來保護密碼。

+1

要同步而不是異步運行(如上面的代碼將執行),請嘗試ShellAndWait:http://www.mvps.org/access/api/api0004.htm。 – 2008-09-26 19:34:42

1

我會尋找一個命令行加密器/解密器,只需在您的Access應用程序中使用正確的參數調用exe。

我知道VBA中沒有PGP加密器/解密器。

1

我不熟悉VBA for Access,但我認爲最好的解決方案(也許最簡單)將運行外部命令行PGP實用程序。

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 

希望能指出你有用的方向。

+1

這就需要在Access中調用SHELL,它將異步運行。在這種情況下,您可以使用Access Web中的ShellAndWait代碼http://www.mvps.org/access/api/api0004.htm。 – 2008-09-26 19:33:55

1

有一個DLL可以直接從您的VBA應用程序調用,而無需跨越外部程序:CryptoCX。 PGP還有一個你可以調用的DLL。

2

Stu ...我曾經用Java寫過一個「Secure SMTP」服務器......最簡單最快捷的方法是下載和/或購買PGP。他們有一個SDK,可以用來訪問任何你想要的東西。

我必須回去看看是否必須寫一個COM包裝器,或者如果他們已經有一個。 (我在10年前寫了這個SMTP服務器)。不管怎樣,不要灰心。大約5年前,我用C++編寫了一個完整的基於PGP的應用程序(基於openPGP RFC),但是我注意到,我允許使用任何現有庫的NOT。所以我必須自己寫所有的東西。並且,我使用GPG,OpenPGP和PGP進行測試等。

因此,我甚至可以爲您提供關於如何在VBA中解碼這些東西的幫助。這不是不可能的,(它可能會像地獄一樣緩慢,但並非不可能),而且我不是一個「掏腰包,運行cmdline的東西爲你做這樣的工作,因爲它會讓你面對一些嚴重的安全風險,因爲hurcane的建議(例如)會導致你的密碼顯示到像ProcExp這樣的工具)。第一步是學習PKE是如何工作的等等。然後,你需要做的步驟來得到你想要的。

這是我對幫助感興趣的東西,因爲我一直都是編寫所有人都說不能完成的代碼。:)另外,我擁有我編寫的應用程序的源代碼,因爲合併,關閉等等...

它最初是爲石油和天然氣行業編寫的,所以我知道它是安全的。這並不是說我沒有代碼中存在10個安全缺陷,但我認爲它很穩定。我知道我的中國剩餘Threory代碼有問題。由於某些原因,當我使用該快捷方式時,我無法正確解碼數據,但是如果我使用RSA「長途」,它可以工作...

現在,這個應用程序從來沒有完全完成,所以我不支持像DSA密鑰對這樣的東西,但是我確實支持RSA密鑰對,SHA1,MD5,使用IDEA,AES(我的THINK我的3DES代碼無法正常工作,但我可能已經修復,因爲)。我還沒有實現壓縮,等等......但是,我很想回到原來的代碼並重新編寫代碼。

I/COULD /讓你成爲一個COM對象,你可以從VBA調用通過原始Base64數據,以及Base64密鑰數據(或指向磁盤上的密鑰文件的指針)以及解密的passpsshrase文件....

想想看...讓我知道..

多年來,我收集的VBScript代碼,做這樣的事情MD5,SHA1,IDEA等加密程序,但我沒有寫出來。地獄,你可能只是與微軟的CryptoAPI進行交互,並將每個行動分解爲它的核心部分,然後繼續工作。 (你不會找到像「DecryptPGP()」一樣的Micosoft CryptoAPI調用...它必須以塊來完成)。

讓我知道我是否可以幫忙。