2017-06-13 657 views
0

我在加密時遇到以下代碼的異常。 創建密鑰是「[B @ 29ee9faa」。 「加密時出錯:java.security.InvalidKeyException:無效的AES密鑰長度:11字節」加密時出錯:java.security.InvalidKeyException:無效的AES密鑰長度:11字節

此外,我已經更新了我的jre/lib/security中的local_policy和Us_export_policy。

public static String generateKey(String eisId) 
    { 
    String uuidKey = null; 
    try { 

     KeyGenerator gen = KeyGenerator.getInstance("AES"); 
     gen.init(128); /* 128-bit AES */ 
     SecretKey secret = gen.generateKey(); 
     uuidKey = secret.getEncoded().toString(); 
     System.out.println("uuidKey : "+uuidKey); 

     // Store in DB 
     // ********************** 

    } catch (NoSuchAlgorithmException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    return uuidKey; 
} 

public static SealedObject encryptData(String eisId, SecurityDomainDTO sDObj) 
{ 
    try 
    { 
     String secret = generateKey(eisId); 
     SecretKeySpec aesKey = new SecretKeySpec(secret.getBytes(), "AES"); 
     Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); 
     cipher.init(Cipher.ENCRYPT_MODE, aesKey); 
     SealedObject so = new SealedObject(sDObj, cipher); 

     return so; 
    } 
    catch (Exception e) 
    { 
     System.out.println("Error while encrypting: " + e.toString()); 
    } 
    return null; 
} 
+0

'toString()'不能這樣工作,無論如何將byte []轉換爲字符串在這裏沒有意義。 –

回答

0

「[B @ 29ee9faa」字符串是一個很大的線索。當您致電toString()時,您會收到byte[]。它不代表字節數組的內容。相反,它會重新聲明內部類型名稱(「[B」)和對象的身份哈希碼。

這是錯誤:

 uuidKey = secret.getEncoded().toString(); 

即不要格式化內容的字節數組的的正確方法。

我建議你使用Base64類;例如

Base64.Encoder encoder = Base64.getEncoder(); 
    String encoded = encoder.encode(bytes); 

    ... 

    Base64.Decoder decoder = Base64.getDecoder(); 
    byte[] bytes = decoder.decode(encoded); 
+0

這是它給了java.security.InvalidKeyException:參數缺失「 –

+0

我建議你考慮一下我說的...關於解碼**如果這沒有幫助,請用你的更新代碼問一個新問題 –

+0

當然,我認爲這應該是一個不同的問題。 –

相關問題