2017-08-17 69 views
1

我在服務器端加密會話Id,但是當我試圖在客戶端解密會話ID時,會出現一些錯誤。請任何人都可以幫助解決這個錯誤。使用java在客戶端解密使用java

public static String decrypt(String sessionId) 
{ 
    try 
    { 
     Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5PADDING"); 
     final SecretKeySpec secretKey = new SecretKeySpec(key, "AES"); 
     cipher.init(Cipher.DECRYPT_MODE, secretKey); 
     final String decryptedSessionId = new String(cipher.doFinal(Base64.decodeBase64(sessionId))); 
     return decryptedSessionId; 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 

    } 
    return null; 
} 

即未來的錯誤是: 類「javax.crypto.Cipher中」不存在於JRE仿真庫,因此它不能在「一些」 GWT模塊的客戶機代碼來使用。

此檢查報告JRE仿真庫中不存在的JDK類的客戶端代碼中的用法。

加密的方法,我用的是:

public static String encrypt(String sessionId) 
{ 
    try 
    { 
     Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); 
     final SecretKeySpec secretKey = new SecretKeySpec(key, "AES"); 
     cipher.init(Cipher.ENCRYPT_MODE, secretKey); 
     final String encryptedSessionId = Base64.encodeBase64String(cipher.doFinal(sessionId.getBytes())); 
     return encryptedSessionId; 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 
    return null; 

} 

我是新來這個東西,請幫助我解決這些錯誤的

+0

這是一個建議(不回答)。在您使用GWT將代碼移動到服務器端(RPC)時。這樣就不需要仿真了。也許你可以在客戶端使用JDK。 –

+0

**切勿使用[ECB模式](https://crypto.stackexchange.com/q/14487/13022)**。它是確定性的,因此不具有語義安全性。您至少應該使用[CBC](https://crypto.stackexchange.com/q/22260/13022)或[CTR](https://crypto.stackexchange.com/a/2378/)這樣的隨機模式。 13022)。最好對密文進行身份驗證,以便像[padding oracle attack](https://crypto.stackexchange.com/q/18185/13022)這樣的攻擊是不可能的。這可以通過驗證模式(如GCM或EAX)或[加密 - 然後MAC](https://crypto.stackexchange.com/q/202/13022)方案完成。 –

回答

1

好了,你不能在GWT客戶端編碼使用Java標準加密庫側。它不受支持。使用gwt-crypto加密/解密必要的東西。

GWT-crypto中的GWT客戶端不支持AES,但您可以使用TripleDES。 TripleDES也是非常安全的實現。

+0

它解決了你的問題嗎? – nagendra547

+0

您提供的鏈接是使用DES方法,我已經有DES實現應用程序,但我需要使用AES實現。 –

+0

我認爲沒有任何庫在Java的客戶端支持AES解密,所以我需要使用JSNI來實現它。我對麼? –