【发布时间】:2013-12-27 17:41:18
【问题描述】:
由于某种原因,无论指定什么算法,在调用 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 运行),则可以正常工作。
这种行为的原因可能是什么?
【问题讨论】:
-
我发现了问题 - 我的单元测试使用的是 PowerMockito,它看起来会阻止类路径或其他什么。无论如何,在删除它并重写测试后,一切正常。
-
难以置信,我很高兴我不是唯一注意到这一点的人。显然 PowerMock 人员已经意识到这一点,如果您使用 BouncyCastle 加密 API,它也适用:groups.google.com/forum/#!topic/powermock/3U_ih01cmBA