java.security.NoSuchAlgorithmException:找不到带有RSA实现的签名MD5

java.security.NoSuchAlgorithmException:找不到带有RSA实现的签名MD5,java,cryptography,websphere,bouncycastle,Java,Cryptography,Websphere,Bouncycastle,我在WebSphereServer8.5上遇到问题 具有 Java版本=1.6.0,Java运行时版本=pap6460_26sr8fp7ifx-20151008_01(SR8 FP7) 失败的代码是: Security.addProvider(new BouncyCastleProvider()); Signature sign = Signature.getInstance("MD5withRSA", "BC"); 我得到的错误是: java.security.NoSuchAlg

我在WebSphereServer8.5上遇到问题 具有 Java版本=1.6.0,Java运行时版本=pap6460_26sr8fp7ifx-20151008_01(SR8 FP7)

失败的代码是:

   Security.addProvider(new BouncyCastleProvider());
   Signature sign = Signature.getInstance("MD5withRSA", "BC");
我得到的错误是:

java.security.NoSuchAlgorithmException: Signature MD5WITHRSA implementation not found: java.lang.ClassNotFoundException: org.bouncycastle.jcajce.provider.asymmetric.rsa.DigestSignatureSpi$MD5
相同的代码适用于java版本稍有不同的开发环境(java版本=1.6.0,java运行时版本=pap6460_26sr8fp20-20160111_01(SR8 FP20))

我尝试用以下代码列出所有签名算法:

addProvider(新的BouncyCastleProvider())

所以,MD5withRSA就在那里

类org.bouncycastle.jcajce.provider.asymetric.rsa.DigestSignatureSpi$MD5位于应用程序内部,并且

 System.out.println("--->DigestSignatureSpi" + MD5.class.getResource("DigestSignatureSpi$MD5.class"));
正确返回类的位置


那么可能是什么问题呢?

请用以下代码片段验证您的输出

AlgoCheck.java

import java.net.URL;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.security.Security;
import java.security.Signature;
import org.bouncycastle.jcajce.provider.asymmetric.rsa.DigestSignatureSpi;
import org.bouncycastle.jce.provider.BouncyCastleProvider;

public class AlgoCheck {

public static void main(String[] args) throws NoSuchAlgorithmException,
    NoSuchProviderException, ClassNotFoundException {

Security.addProvider(new BouncyCastleProvider());
URL bcClassUrl = AlgoCheck.class.getClassLoader()
        .getResource("org/bouncycastle/jce/provider/BouncyCastleProvider.class");
System.out.println("BouncyCastleProvider class URL   = " + bcClassUrl);

ClassLoader loader = DigestSignatureSpi.MD5.class.getClassLoader();
URL md5ClassUrl = loader.getResource(
 "org/bouncycastle/jcajce/provider/asymmetric/rsa/DigestSignatureSpi$MD5.class");
System.out.println("DigestSignatureSpi.MD5 class URL = " + md5ClassUrl);

Signature sign = Signature.getInstance("MD5withRSA", "BC");
System.out.println("algorithm = " + sign.getAlgorithm());
    }
}
加载类
BouncyCastleProvider
DigestSignatureSpi.MD5
的库应该相同

示例输出

BouncyCastleProvider class URL   = jar:file:/home/suboptimal/.m2/repository/org/bouncycastle/bcprov-jdk15on/1.49/bcprov-jdk15on-1.49.jar!/org/bouncycastle/jce/provider/BouncyCastleProvider.class
DigestSignatureSpi.MD5 class URL = jar:file:/home/suboptimal/.m2/repository/org/bouncycastle/bcprov-jdk15on/1.49/bcprov-jdk15on-1.49.jar!/org/bouncycastle/jcajce/provider/asymmetric/rsa/DigestSignatureSpi$MD5.class
algorithm = MD5withRSA

这是一个众所周知的和谐问题。将Bouncy JAR放入appserver lib/ext目录。

基于
java.lang.ClassNotFoundException
我相信
org.bouncycastle.jcajce.provider.asymmetric.rsa.DigestSignatureSpi$MD5
在执行
Signature=Signature.getInstance(“MD5withRSA”,“BC”)
时,类路径中不存在。在这两种情况下,您都检查过Bouncy Castle的版本了吗?版本与web应用程序中的jar版本相同。文件必须位于类路径中。否则System.out.println(“-->DigestSignatureSpi”+MD5.class.getResource(“DigestSignatureSpi$MD5.class”))不会告诉我它在哪里。
import java.net.URL;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.security.Security;
import java.security.Signature;
import org.bouncycastle.jcajce.provider.asymmetric.rsa.DigestSignatureSpi;
import org.bouncycastle.jce.provider.BouncyCastleProvider;

public class AlgoCheck {

public static void main(String[] args) throws NoSuchAlgorithmException,
    NoSuchProviderException, ClassNotFoundException {

Security.addProvider(new BouncyCastleProvider());
URL bcClassUrl = AlgoCheck.class.getClassLoader()
        .getResource("org/bouncycastle/jce/provider/BouncyCastleProvider.class");
System.out.println("BouncyCastleProvider class URL   = " + bcClassUrl);

ClassLoader loader = DigestSignatureSpi.MD5.class.getClassLoader();
URL md5ClassUrl = loader.getResource(
 "org/bouncycastle/jcajce/provider/asymmetric/rsa/DigestSignatureSpi$MD5.class");
System.out.println("DigestSignatureSpi.MD5 class URL = " + md5ClassUrl);

Signature sign = Signature.getInstance("MD5withRSA", "BC");
System.out.println("algorithm = " + sign.getAlgorithm());
    }
}
BouncyCastleProvider class URL   = jar:file:/home/suboptimal/.m2/repository/org/bouncycastle/bcprov-jdk15on/1.49/bcprov-jdk15on-1.49.jar!/org/bouncycastle/jce/provider/BouncyCastleProvider.class
DigestSignatureSpi.MD5 class URL = jar:file:/home/suboptimal/.m2/repository/org/bouncycastle/bcprov-jdk15on/1.49/bcprov-jdk15on-1.49.jar!/org/bouncycastle/jcajce/provider/asymmetric/rsa/DigestSignatureSpi$MD5.class
algorithm = MD5withRSA