SecretKeyFactory.getInstance()在单元测试中抛出所有算法的异常

时间:2013-12-27 17:41:19

标签: java security powermock

由于某种原因,无论指定什么算法,在调用SecretKeyFactory.getInstance()时,我总是在单元测试中得到异常。例如:

SecretKeyFactory.getInstance("PBEWITHMD5ANDDES")

com.mhe.connect.util.EncryptionException: java.security.NoSuchAlgorithmException: PBEWITHMD5ANDDES SecretKeyFactory not available

同时,我看到Security.getProviders()返回了我需要的算法:

SECRETKEYFACTORY.DESEDE SunJCE
SECRETKEYFACTORY.PBEWITHMD5ANDDES SunJCE
SECRETKEYFACTORY.DES SunJCE
SECRETKEYFACTORY.PBEWITHMD5ANDTRIPLEDES SunJCE
SECRETKEYFACTORY.PBKDF2WITHHMACSHA1 SunJCE
SECRETKEYFACTORY.PBEWITHSHA1ANDDESEDE SunJCE
SECRETKEYFACTORY.PBEWITHSHA1ANDRC2_40 SunJCE

这只发生在单元测试中(来自Maven或IDE),并且如果代码在Jetty下运行(从相同的Maven / JDK运行),则可以正常工作。

这种行为可能是什么原因?

2 个答案:

答案 0 :(得分:31)

今天遇到同样的问题。通过向班级添加@PowerMockIgnore ("javax.crypto.*")来解决此问题。

有谁知道我是否可以全局忽略此套餐?我不想将它添加到从该包执行代码的每个类中。

答案 1 :(得分:0)

谢谢,@ T3rm1解决了我的问题!

证明正在运行

SecretKeyFactory.getInstance(<algorithm>)

在powermockito的测试环境中,javax.crypto。*必须被模拟,因此在我的情况下抛出 java.security.NoSuchAlgorithmException

javax.crypto.SecretKeyFactory no such algorithm PBKDF2WithHmacSHA1