在Android应用程序中使用密码的Robolectric问题

时间:2016-12-12 11:37:52

标签: android encryption robolectric sqlcipher-android

您好我正在使用Robolectric进行测试用例。在模拟加密相关的测试用例时,我遇到了一些问题。我尝试使用带有AES的密码进行加密。它给了我一些错误。我尝试了以下方式:

    @Test
public void testGet() {
    Cipher cipher = null;
    try {
        SecretKey sks= getKeySpec(pass, salt);
        cipher = Cipher.getInstance("AES");
        cipher.init(Cipher.DECRYPT_MODE, sks);
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    } catch (NoSuchPaddingException e) {
        e.printStackTrace();
    } catch (InvalidKeySpecException e) {
        e.printStackTrace();
    } catch (InvalidKeyException e) {
        e.printStackTrace();
    }
}

public SecretKey getKeySpec(char[] pass, byte[] salt) throws NoSuchAlgorithmException, InvalidKeySpecException {

    //generate key spec...
    return secretKeyFactory.generateSecret(keySpec);
}

它给了我以下错误:

Illegal key size or default parameters

我已经为非法大小异常添加了JCE。如果我在设备上运行它并在我的应用程序中正常工作它是有效的。只有当我尝试使用robolectric它才会给我这个错误。需要一些帮助。谢谢。

1 个答案:

答案 0 :(得分:2)

背后的原因是Robolectric在JVM上运行。 JVM仅支持最多128位密钥加密。因此,如果您使用的是256位密钥加密,则需要使用Java Cryptography Extension(JCE)。 follow this answer如何做到这一点