开发者

Android Cipher problems. InvalidKeyException?

I'm trying to create an application for Android that uses encryption to save user information and I cannot figure out what I'm doing wrong. I'm trying to create an instance of an AES cipher but the application keeps on throwing "InvalidKeyExceptions." Consider the following code:

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();
    }
}

I get this exception:

java.security.InvalidKeyException: initialisation vector must be the same length as block size..

The myCipher.init(...) line triggers this exception.

I understand what it's saying but according to myCipher.getBlockSize() the IV byte array should hold 16 bytes, and it does, but it doesn't work. I have also tried byte arrays of length 0-128, and nothing in that range works either.

Oh also, if I take this code, unaltered, and add it to a regular Java application, I get no errors. Compiling for Android seems to be causing this error.

Please help. Thanks, Ryan


Have you tried specifying explicitly the block size in your mode parameter?

Ex:

Cipher.getInstance("AES/CBC16/PKCS5Padding");

I noticed here that if you don't specify the block size then it is provider dependent.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜