我正在嘗試爲Android創建一個應用程序,該應用程序使用加密來保存用戶信息,但我無法弄清楚我做錯了什麼。我試圖創建一個AES密碼的實例,但應用程序繼續拋出「InvalidKeyExceptions」。請看下面的代碼:Android密碼問題。 InvalidKeyException異常?
public static final byte[] IV = new byte[]
{ 0x04, 0x08, 0x15, 0x16, 0x23, 0x42, 0x00, 0x00, 0x00, 0x00,0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f};
protected final IvParameterSpec params = new IvParameterSpec(IV);
protected Cipher myCipher;
public AESEncryptor(String passwd, InputStream source, String destinationFile)
{
try
{
myCipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
Log.d("System.out.println", "Block Size: "+myCipher.getBlockSize());
myCipher.init(Cipher.ENCRYPT_MODE, AESEncryptor.generateSecretKeyFromPassword(passwd),params);
}
catch (Exception e)
{
e.printStackTrace();
}
}
我得到這個異常:
java.security.InvalidKeyException: 初始化向量必須是同一 長度塊大小..
的myCipher.init(...)行會觸發此異常。
我明白這是什麼意思,但根據myCipher.getBlockSize()IV字節數組應該保存16個字節,它確實,但它不起作用。我也嘗試了長度爲0-128的字節數組,並且該範圍內的任何內容都不起作用。另外,如果我將這段代碼保持不變,並將其添加到常規Java應用程序中,則不會出現錯誤。爲Android編譯似乎會導致此錯誤。
請幫忙。 謝謝, Ryan
是異常的確切文本?我無法在openjdk中找到它,但它可能會改變文本。 – 2010-02-15 12:54:45
是的,這是確切的文字。其餘的例外只是一個堆棧跟蹤。他們可能已經改變了文本,因爲「初始化」拼錯了......應該是「初始化」。 – RyanM 2010-02-15 13:07:31