java - 安卓密码问题。无效 key 异常?

标签 java android encryption

我正在尝试为 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/

相关文章:

android - 无法将 aar 导入 android studio 中的库项目

node.js - NPM - ActiveDirectory 模块身份验证

ios - 卡在为 Bluemix 推送创建 .p12 推送证书文件

java - 3DES 解密错误 key 长度无效

java - 从 imageview Android 中删除图像

java - 在没有循环的情况下使用给定数量的空值初始化 List<T>?

android - 在真正的 android 设备 2.3 上的 google maps v2 中膨胀类 fragment ?

Android 从 Azure Blob 存储下载导致文件无效

java - 如何调用android :onClick on xml button under another xml listview using fragment?

java - 在 @Controller 方法上使用 @Before 方面与 Spring 不起作用