由于某种原因,无论指定什么算法,在调用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运行),则可以正常工作。
这种行为可能是什么原因?
答案 0 :(得分:31)
今天遇到同样的问题。通过向班级添加@PowerMockIgnore ("javax.crypto.*")
来解决此问题。
有谁知道我是否可以全局忽略此套餐?我不想将它添加到从该包执行代码的每个类中。
答案 1 :(得分:0)
谢谢,@ T3rm1解决了我的问题!
证明正在运行
SecretKeyFactory.getInstance(<algorithm>)
在powermockito的测试环境中,javax.crypto。*必须被模拟,因此在我的情况下抛出 java.security.NoSuchAlgorithmException
javax.crypto.SecretKeyFactory no such algorithm PBKDF2WithHmacSHA1