3

嗨,我正在使用 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 时,它才会给我这个错误。需要一些帮助。谢谢你。

4

1 回答 1

2

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

于 2017-03-16T03:28:40.747 回答