8

嗨,我是 Java 安全的初学者,在调用时遇到以下问题:

Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");

我得到了错误:

java.lang.ClassCastException: com.sun.crypto.provider.RSACipher cannot be cast to javax.crypto.CipherSpi

在我的 war 文件中还有 5 个用于支付网关加密的 jars 文件:

  • cryptix-jce-api.jar
  • cryptix-jce-provider.jar
  • cryptix-消息-api.jar
  • cryptix-openpgp-provider.jar
  • cryptix-pki-api.jar

如果没有这 5 个 JAR 文件,那么Cipher.getInstance()就可以工作,但这是不可能的,因为我需要 JAR 来加密支付信息。

那里的任何人都可以向我展示我应该如何克服这个问题的路径?

4

3 回答 3

19

Powermockito 无法增强 javax.crypto 类,因此您可以在类级别添加以下注释:

@PowerMockIgnore("javax.crypto.*") or @PowerMockIgnore({"javax.crypto" })

于 2012-10-16T12:40:41.857 回答
1

感谢所有的评论和回答。
最后,我将 5 个 Jars 从 WAR 文件移到服务器 Jars 库目录并解决了这个问题。
中间有一个java.lang.RuntimeException: NYI
使用这里的解决方案解决了这个问题:http: //javabeanz.wordpress.com/2009/06/11/java-lang-runtimeexception-nyi/
希望这对任何人都有帮助。
再次感谢!

于 2012-10-19T01:43:49.573 回答
1

在类级别添加@PowerMockIgnore("javax.crypto.*")@PowerMockIgnore({"javax.crypto" })
添加后如果显示 Jce 安全异常
您可以下载此文件Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files 8并替换此路径中的 local_policy jar 文件和 US_policay jar 文件:

C:\Program Files\Java\jdk1.8.0_151\jre\lib\security
于 2017-12-13T07:16:42.993 回答