2011-05-20 227 views
3

我是一個j2me程序員。我的項目涉及通過HTTP方法將數據發送到服務器。我使用Bouncy Castle(Triple DES)對j2me端的數據進行加密。我也維護服務器端編碼。使用隨機生成的密鑰進行加密和解密?

然後,在服務器側接收到的數據被解密並存儲在數據庫中。

這裏我假設靜態編碼本身的關鍵。在服務器端和j2me端,我使用相同的鍵值。

但這裏有一個基於要求的問題:密鑰是隨機產生的,用戶不知道

在這種情況下,如果在J2ME部分加密與一些主要的服務器然後解密如何在不知道密鑰的數據?

或者有其他的機制是存在的,所以請幫助解決這些問題。

感謝和問候, Sivakumar.J

+3

我認爲需要某種形式的[公鑰加密/非對稱加密](http://en.wikipedia.org/wiki/Public-key_cryptography):「......與對稱密鑰算法不同,公鑰算法不需要在發送者和接收者之間安全地初始交換一個或多個密鑰......「。 – 2011-05-20 04:53:36

+0

使用公鑰加密交換某種對稱密鑰(您的3DES密鑰)的會話密鑰。 – 2011-07-04 02:09:08

回答

1

有幾種方式來實現自己的目標。要做到這一點

一種方法是使用某種形式的密鑰交換/協定協議,例如的Diffie-Hellman式密鑰交換(參見http://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange)。由於您在J2ME環境中,您可能希望使用最近使用橢圓曲線的實現,因爲它們對硬件要求更加溫和。

實現您的目標的另一種方法是使用公鑰證書實現安全的密鑰傳輸協議,但我不建議發明自己的安全協議,而是使用專爲這些情況設計的SSL/TLS。

根據你的要求,你要麼需要在其服務器進行身份驗證(「單向SSL」),或在其相互認證形式(「雙向SSL」)使用SSL。有關正確設置SSL的信息,請參閱您的Web服務器的文檔。

一旦設置了就足夠了在客戶端上創建對稱加密密鑰,因爲它是目前完成的,然後發送加密密鑰使用新設立的TLS連接的服務器的服務器。

Diffie-Hellman解決方案的優點是它不一定涉及證書,但要安全地使用它,您需要實現某種形式的密鑰派生函數(參見http://csrc.nist.gov/publications/fips/fips186-3/fips_186-3.pdf),這又是非平凡的。因此,我建議使用第二種方法,即使這意味着更多的配置開銷。

相關問題