2011-08-27 147 views
0

我正在嘗試使PHP腳本與Java應用程序進行交互。他們會共享一些信息,所以我想對它們之間傳遞的數據進行加密,以使其儘可能安全,並擁有SSL證書。但是,因爲我的網站只在共享服務器JustHost上,據我所知,我不能使用'mcrypt'PHP模塊,所以我不知道如何做到這一點,以便我的Java應用程序和PHP腳本可以加密正在發送的數據並解密正在接收的數據!PHP和Java之間的加密和解密

+3

爲什麼你不只是在一個標準的加密系統(比如RSA)上定居下來並在PHP和Java中使用它們的實現呢?比如,像http://pear.php.net/package/Crypt_RSA和http://www.javamex.com/tutorials/cryptography/rsa_encryption.shtml? –

+0

@Rafael:如果mcrypt不是一個選項,Crypt_RSA很可能不會(它也依賴於外部模塊)。順便說一下,R​​SA不應該用於數據加密,而是用於握手並取消共同的密鑰。 –

+0

@安迪:您是否已經使用SSL在應用程序之間進行通信。如果是這樣,爲什麼你想添加一個額外的加密層? SSL足夠。 –

回答

1

Java和PHP之間的SSL對話將保護您的數據在傳輸過程中。如果您使用強密碼(10個以上符號)正確保護私鑰,並確保強大的算法,那麼通過窺探對話,任何人都無法破解私鑰。

在通過SSL對話發送數據之前,您不會通過加密數據獲得任何額外的保護。而且你實際上可能會削弱你的安全性,因爲爲了讓你加密數據,你應該選擇對稱加密來分享一些密鑰。而且,通過交易祕密密鑰,您可以撤消SSL提供的大部分保護,因爲SSL的巨大好處就是我們可以在不同意祕密密鑰的情況下對數據進行加密。如果我試圖獲取加密文本,我會攻擊您的客戶端,因爲找到對稱加密密鑰比打破SSL更容易。雖然你可以使用非對稱加密,但你基本上會重新發明SSL。

我會專注於確保您的SSL對話很強大。只使用最強對稱加密:TripleDES,IDEA,AES(如果您的服務器支持它)。拿出較弱的算法,以便對話不能使用較弱的加密。生成1024+公鑰/私鑰對。這在共享服務器上並不總是那麼容易,但是Java應用程序只能選擇使用TripleDES,IDEA和AES。

確保您在客戶端驗證服務器的證書,以確保您不會與虛假服務通話。這基本上意味着採取服務器的證書並將其添加到客戶端上使用的密鑰庫。如果這是Java,則可以使用keytool導入證書,並將該密鑰庫用作SSL對話中的TrustManager/KeyManager。

如果您想要在數據通過SSL會話後對數據進行加密,那麼您只能在服務器上進行加密/解密。但是,你仍然有一個關鍵的管理問題。如果您加密/解密,您計劃如何保護服務器上的密鑰?這總是一個沒有簡單答案的醜陋問題。

+0

爲什麼不愛AES? – NullUserException

+0

是的,你是對的,AES會是最好的,但我不認爲Apache支持它開箱即用。謝謝你提到它。爲了以防萬一,我將它添加到答案中。 – chubbsondubs

+0

@chubbard:對於延遲迴復感到抱歉,非常感謝您的回答。我現在肯定會爲我的SSL證書的安全性做出解決;我很高興你警告說我可以通過增加另一層加密來實際上危害我的SSL - 特別是在最好的時候看到我不是PHP的專家!你也告訴過我將證書導入到我的Java應用程序中,這是我不知道我應該做的事情,我一定會考慮 - 所以我也非常感謝你!(我只是覺得它很簡單將https加入不是http) – Andy