您好我正在使用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它才会给我这个错误。需要一些帮助。谢谢。
答案 0 :(得分:2)
背后的原因是Robolectric在JVM上运行。 JVM仅支持最多128位密钥加密。因此,如果您使用的是256位密钥加密,则需要使用Java Cryptography Extension(JCE)。 follow this answer如何做到这一点