【问题标题】:SecretKeyFactory.getInstance() throws exception for all algorithms in unit testsSecretKeyFactory.getInstance() 为单元测试中的所有算法抛出异常
【发布时间】: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

标签: java security powermock


【解决方案1】:

今天遇到了同样的问题。通过在类中添加@PowerMockIgnore ("javax.crypto.*") 来解决它。

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

【讨论】:

    【解决方案2】:

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

    原来是在运行

    SecretKeyFactory.getInstance(<algorithm>)
    

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

    javax.crypto.SecretKeyFactory no such algorithm PBKDF2WithHmacSHA1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-17
      • 1970-01-01
      • 2013-01-21
      • 2018-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多