Java security class cast exception

2019-03-21 17:06发布

问题:

Hi I am beginner in Java security, i encounter the following issue, when calling :

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

I got the error :

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

There are 5 more jars file for a payment gateway encryption in my war file:

  • cryptix-jce-api.jar
  • cryptix-jce-provider.jar
  • cryptix-message-api.jar
  • cryptix-openpgp-provider.jar
  • cryptix-pki-api.jar

Without these 5 JAR files then the Cipher.getInstance() works, but that is not possible because I need the JARs for payment information encryption.

Anyone out there can show me the path of how should I overcome this issue?

回答1:

Powermockito can't enhance javax.crypto classes so you might to add following annotation at the class level:

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



回答2:

Thanks for all the comments and answers.
In the end, I moved the 5 Jars out from WAR file to server Jars library directory and solved this.
In between there was an java.lang.RuntimeException: NYI.
It was solved using the solution from here: http://javabeanz.wordpress.com/2009/06/11/java-lang-runtimeexception-nyi/
Hope this helps, to anyone out there.
Once again thanks!



回答3:

Add this at class level @PowerMockIgnore("javax.crypto.*")or @PowerMockIgnore({"javax.crypto" })
After adding it if it shows Jce security exception
You can download this file Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files 8 and replace the local_policy jar file and US_policay jar file in this path:

C:\Program Files\Java\jdk1.8.0_151\jre\lib\security