2012-05-30 2 views
1

Я работаю с веб-приложением Java, и мне нужно сгенерировать MAC, используя алгоритм 3DES. Код работает без проблем в Weblogic 10.3, но проблема возникла, когда я попытался запустить приложение в другой Weblogic, аналогичной версии (10.3.1).

Это мой код:

public String getMac(String inkey, String data) throws Exception { 

    byte[] out = new byte[8]; 

    try { 

     // if I commend this line, the result is the same 
     Security.addProvider(new BouncyCastleProvider()); 

     // this loop proves the BC provider is there 
     for (Provider p : Security.getProviders()) { 

      log.debug("--"); 
      log.debug(p.getName()); 
      log.debug(p.getInfo()); 
     } 

     try { 

      BouncyCastleProvider bc = new BouncyCastleProvider(); 

      // class is there, no problem 
      log.debug("info" + bc.getInfo()); 

      DES9797Alg3 alg3 = new DES9797Alg3(); 

      // class is there, no problem 
      log.debug("alg3" + alg3.toString()); 

     } catch (Exception e) { 
      log.error("error BouncyCastleProvider classes"); 
     } 

     log.debug("length: " + inkey.length()); 

     if (inkey.length() < 48) 
      inkey += inkey.substring(0, 16); 

     byte[] rawkey = hexStringToByteArray(inkey); 
     DESedeKeySpec keyspec = new DESedeKeySpec(rawkey); 
     SecretKeyFactory keyfactory = SecretKeyFactory.getInstance("DESede"); 
     SecretKey key = keyfactory.generateSecret(keyspec); 

     Mac mac = Mac.getInstance("ISO9797Alg3Mac"); 

     mac.init(key); 

     mac.update(data.getBytes()); 

     mac.doFinal(out, 0); 

    } catch (Exception e) { 

     log.error("Error generating MAC X9_19", e); 

     throw new Exception("Error generating MAC X9_19", e); 

    } 

И это ошибка я получаю:

Caused by: java.security.InvalidKeyException: No installed provider supports this key: com.sun.crypto.provider.DESedeKey 
    at javax.crypto.Mac.a(DashoA13*..) 
    at javax.crypto.Mac.init(DashoA13*..) 
    at es.indra.netplus.sec.services.util.UtilMac.getMac(UtilMac.java:180) 
    ... 73 more 
Caused by: java.security.NoSuchAlgorithmException: class configured for Mac(provider: BC)cannot be found. 
    at java.security.Provider$Service.getImplClass(Provider.java:1268) 
    at java.security.Provider$Service.newInstance(Provider.java:1220) 
    ... 76 more 
Caused by: java.lang.ClassNotFoundException: org.bouncycastle.jce.provider.JCEMac$DES9797Alg3 
    at weblogic.utils.classloaders.GenericClassLoader.findLocalClass(GenericClassLoader.java:283) 
    at weblogic.utils.classloaders.GenericClassLoader.findClass(GenericClassLoader.java:256) 
    at weblogic.utils.classloaders.ChangeAwareClassLoader.findClass(ChangeAwareClassLoader.java:54) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:248) 
    at weblogic.utils.classloaders.GenericClassLoader.loadClass(GenericClassLoader.java:176) 
    at weblogic.utils.classloaders.ChangeAwareClassLoader.loadClass(ChangeAwareClassLoader.java:35) 
    at java.security.Provider$Service.getImplClass(Provider.java:1262) 

Я не понимаю, почему ошибка говорит, что org.bouncycastle.jce.provider.JCEMac$DES9797Alg3 нет. Возможно, что «java.security» смотрит в другое место? Я попросил администратора сервера скопировать библиотеку в каталог с поддержкой, но я не уверен, что это будет работать, и это происходит.

Обратите внимание, что даже если я удалю 'Security.addProvider (новый BouncyCastleProvider()); line, в списке доступных поставщиков, BC указан.

Это список поставщиков я получил:

-- -- -- 
CSSX509CertificateFactoryProvider 
CSS JDK CertPath provider 
1.0 
-- -- -- 
SUN 
SUN (DSA key/parameter generation; DSA signing; SHA-1, MD5 digests; SecureRandom; X.509 certificates; JKS keystore; PKIX CertPathValidator; PKIX CertPathBuilder; LDAP, Collection CertStores, JavaPolicy Policy; JavaLoginConfig Configuration) 
1.6 
-- -- -- 
SunRsaSign 
Sun RSA signature provider 
1.5 
-- -- -- 
SunJSSE 
Sun JSSE provider(PKCS12, SunX509 key/trust factories, SSLv3, TLSv1) 
1.6 
-- -- -- 
SunJCE 
SunJCE Provider (implements RSA, DES, Triple DES, AES, Blowfish, ARCFOUR, RC2, PBE, Diffie-Hellman, HMAC) 
1.6 
-- -- -- 
SunJGSS 
Sun (Kerberos v5, SPNEGO) 
1.0 
-- -- -- 
SunSASL 
Sun SASL provider(implements client mechanisms for: DIGEST-MD5, GSSAPI, EXTERNAL, PLAIN, CRAM-MD5; server mechanisms for: DIGEST-MD5, GSSAPI, CRAM-MD5) 
1.5 
-- -- -- 
XMLDSig 
XMLDSig (DOM XMLSignatureFactory; DOM KeyInfoFactory) 
1.0 
-- -- -- 
SunPCSC 
Sun PC/SC provider 
1.6 
-- -- -- 
WebLogicCertPathProvider 
WebLogic CertPath Provider JDK CertPath provider 
1.0 
-- -- -- 
WLSJDKCertPathProvider 
WebLogic JDK CertPath provider 
1.0 
-- -- -- 
BC 
BouncyCastle Security Provider v1.46 
1.46 

BC есть, кроме того, та же версия, которую я получил в моей войне файл.

У меня есть много часов, не повезло, надеюсь, кто-то может указать мне в правильном направлении.

ответ

3

Проведя много часов в Google, пытаясь исправить ошибку, вносящую изменения в код, была решена проблема с добавлением библиотеки в каталог lib сервера сервера. Во всяком случае, я до сих пор не понимаю, почему это происходит.

Смежные вопросы