2
我一直在嘗試使AES加密和解密在Java中工作一段時間。不幸的是我沒有多少運氣。現在我可以生成的代碼,其中顯示AES - 生成一個密鑰並加載它給出一個無效的密鑰異常
keyGen = KeyGenerator.getInstance("AES");
SecureRandom random = SecureRandom.getInstance();
keyGen.init(size, random);
SecretKey key = keyGen.generateKey();
AesKey = key.getEncoded();
要使用我將其轉換回一個SecretKeySpec的關鍵,並試圖加密的輸入字節的一個方法的一個關鍵。我的加密代碼如下所示。
SecretKeySpec keySpec = new SecretKeySpec(AesKey, "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, keySpec);
return cipher.doFinal(input);
但是,當我調用cipher.init行時,我得到一個InvalidKeyException。
我是否錯誤地生成密鑰?我是否錯誤地加載了密鑰?這是一個組合嗎?我堅持這一點,所以任何見解將不勝感激。
更新
所以我沒有意識到這一點,但被調用生成函數的一部分傳入一個無效的大小。當我找到那些代碼並將其更改爲256時,一切正常。
你可以添加作爲答案?未解答的問題隨着時間的推移被刪除。 – Reno
SecureRandom應該*不*種子,你應該使用默認的構造函數。這將使用系統熵池作爲種子,這比使用時間戳更安全。對即將推出的Android API文檔進行了更新,這將有助於說明這一點。 (我編輯了你的代碼以反映這些變化。) –