2012-06-26 105 views
0

我正試圖實現Java和JavaScript之間的加密解決方案。基於Java生成的RSA密鑰的JavaScript加密

在Java端

我有以下的靜態塊:

public class Manager { 

    public static KeyPairGenerator keyPairGenerator; 
    public static KeyPair keyPair; 

    static{  
     try { 
     keyPairGenerator = KeyPairGenerator.getInstance("RSA"); 
     keyPairGenerator.initialize(1024); 
     keyPair = keyPairGenerator.genKeyPair(); 
     } catch (NoSuchAlgorithmException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     } 
    } 
    ... 
} 

一旦我的服務器運行起來這基本上產生一個新的密鑰對...

後來我給一個公鑰JSON格式:

<% 
JSONObject json = new JSONObject(); 
json.put("publicKey", "-----BEGIN PUBLIC KEY-----" + Base64.encodeBase64URLSafeString(Manager.keyPair.getPublic().getEncoded()) + "-----END PUBLIC KEY-----"); 
%> 

,我想使用該密鑰(可能是1024或2048位)來編碼從客戶端的形式來信息... 人知道浩我可以使用RSA 1024位,base64編碼的公鑰對信息進行編碼嗎?

我試圖jCryption和severel其他庫無濟於事......

+0

在服務器生命週期的所有請求/響應之間共享一個密鑰對?任何原因你不使用SSL透明地做到這一點?相關http://stackoverflow.com/questions/610048/rsa-encryption-decryption-compatible-with-javascript-and-php –

+0

我們也在做SSL ......這是一個額外的層......我們很瘋狂那... ... :) –

回答

0

如果你不把你的公鑰證書,你最好是在發送模量和公共指數分別(如基地64在單獨的字段中編碼)。默認編碼將產生一個X509 SubjectPublicKeyInfo ASN.1結構,您需要在JavaScript庫中解析該結構。

請注意,您只能防止竊聽者;中間人攻擊仍然可行,因爲他們可以用自己的公鑰替換你的公鑰。到目前爲止,RSA 1024已經過時了。幸運的是,您仍然擁有TLS/SSL來保護您。