我正在尝试为 Android 创建一个使用加密来保存用户信息的应用程序,但我不知道自己做错了什么。我正在尝试创建 AES 密码的实例,但应用程序不断抛出“InvalidKeyExceptions”。考虑以下代码:
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: initialisation vector must be the same length as block size..
myCipher.init(...) 行触发此异常。
我明白它在说什么,但根据 myCipher.getBlockSize(),IV 字节数组应该包含 16 个字节,确实如此,但它不起作用。我也尝试过长度为 0-128 的字节数组,但该范围内的任何内容都不起作用。
另外,如果我将这段代码原封不动地添加到常规 Java 应用程序中,我不会出错。为 Android 编译似乎会导致此错误。
请帮忙。 谢谢, 瑞安
最佳答案
您是否尝试过在模式参数中明确指定 block 大小?
例如:
Cipher.getInstance("AES/CBC16/PKCS5Padding");
我注意到了 here如果您不指定 block 大小,则它取决于提供商。
关于java - 安卓密码问题。无效 key 异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2264038/