2016-10-14 79 views
2

我有問題8.5 與 Java版本1.6.0 =,Java運行時版本= pap6460_26sr8fp7ifx-20151008_01(SR8 FP7)java.security.NoSuchAlgorithmException:簽名MD5WITHRSA實施找不到WebSphere服務器上

的失敗的代碼是:

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 

相同的代碼工作在德velopment環境略有不同的Java版本(Java版本1.6.0 =,Java運行時版本= pap6460_26sr8fp20-20160111_01(SR8 FP20))

我試圖列出所有與下面的代碼的所有簽名算法:

安全。 addProvider(new BouncyCastleProvider());

TreeSet<String> algorithms = new TreeSet<String>(); 
    for (Provider provider : Security.getProviders()) 
     for (Service service : provider.getServices()) 
      if (service.getType().equals("Signature")) 
       algorithms.add(service.getAlgorithm()); 
    for (String algorithm : algorithms) 
     System.out.println(algorithm); 

,我也得到:

DSA 
DSAforSSL 
ECDSA 
ECDSAforSSL 
ECGOST3410 
GOST3410 
GOST3411WITHECGOST3410 
MD2WITHRSA 
MD2withRSA 
MD4WITHRSA 
MD5WITHRSA 
MD5withRSA 
MD5withRSA/ISO9796-2 
NONEWITHDSA 
NONEwithECDSA 
OID.1.2.840.113549.1.1.10 
RAWRSASSA-PSS 
RIPEMD128WITHRSA 
RIPEMD160WITHECDSA 
RIPEMD160WITHRSA 
RIPEMD160withRSA/ISO9796-2 
RIPEMD256WITHRSA 
RMD128WITHRSA 
RMD160WITHRSA 
RMD256WITHRSA 
RSA 
RSAPSS 
RSASSA-PSS 
RSAforSSL 
SHA1WITHCVC-ECDSA 
SHA1WITHECNR 
SHA1WITHRSA 
SHA1withDSA 
SHA1withECDSA 
SHA1withRSA 
SHA1withRSA/ISO9796-2 
SHA1withRSA/PSS 
SHA224WITHCVC-ECDSA 
SHA224WITHDSA 
SHA224WITHECDSA 
SHA224WITHECNR 
SHA224WITHRSA 
SHA224withECDSA 
SHA224withRSA 
SHA224withRSA/PSS 
SHA256WITHCVC-ECDSA 
SHA256WITHDSA 
SHA256WITHECDSA 
SHA256WITHECNR 
SHA256WITHRSA 
SHA256withDSA 
SHA256withRSA 
SHA256withRSA/PSS 
SHA2withECDSA 
SHA384WITHDSA 
SHA384WITHECDSA 
SHA384WITHECNR 
SHA384WITHRSA 
SHA384withRSA 
SHA384withRSA/PSS 
SHA3withECDSA 
SHA512WITHDSA 
SHA512WITHECDSA 
SHA512WITHECNR 
SHA512WITHRSA 
SHA512withRSA 
SHA512withRSA/PSS 
SHA5withECDSA 

所以,MD5withRSA是存在的。

類org.bouncycastle.jcajce.provider.asymmetric.rsa.DigestSignatureSpi $ MD5是在應用程序內和

System.out.println("--->DigestSignatureSpi" + MD5.class.getResource("DigestSignatureSpi$MD5.class")); 

正確返回類的位置。

然後會出現什麼問題?

+0

基於'java.lang.ClassNotFoundException'我相信'org.bouncycastle.jcajce.provider.asymmetric.rsa.DigestSignatureSpi $ MD5'在執行'Signature sign = Signature.getInstance(「MD5withRSA 「,」BC「)'。你有沒有在兩種情況下檢查Bouncy Castle的版本? – SubOptimal

+0

版本與Web應用程序的相同戰爭中的jar版本相同。該文件必須位於類路徑中。否則,System.out.println(「---> DigestSignatureSpi」+ MD5.class.getResource(「DigestSignatureSpi $ MD5.class」))不會告訴我它在哪裏。 – Gyonder

回答

1

請使用以下代碼片段驗證您的輸出。

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()); 
    } 
} 

從中類BouncyCastleProviderDigestSignatureSpi.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 
-1

這是一個已知的問題與和諧。將彈力罐放入appserver lib/ext目錄中。