Java Bouncy Castle数据长度未捕获异常

Java Bouncy Castle数据长度未捕获异常,java,exception-handling,bouncycastle,Java,Exception Handling,Bouncycastle,我正在使用bouncy castle进行解密,并试图捕获它抛出的数据长度异常。但是,由于某些原因,JVM无法将异常识别为DataLengtheException。还有其他人有这个问题吗 代码: for(int i=0;i

我正在使用bouncy castle进行解密,并试图捕获它抛出的数据长度异常。但是,由于某些原因,JVM无法将异常识别为DataLengtheException。还有其他人有这个问题吗

代码:

for(int i=0;i
正如您从注释中所看到的,只有在我出于测试原因添加的
catch(RuntimeException)
之前,才会捕获异常。我已经调试了异常并在RuntimeException上设置了断点。例外情况是:
org.bounchCastle.crypto.DataLength异常:输入的RSA密码太大
但是,当我测试org.bounchCastle.crypto.DataLength异常的实例时,我得到false


这里的任何想法都会非常有用。

如果同一个类文件由两个不同的类加载器加载,它将永远不会被视为同一个类,因为类标识由类加载器和完整的类名组成


这是我能看到具有相同全名的类的对象会在测试实例中失败的唯一方法。检查您的工作区/运行时是否有多个bouncycastle JAR副本。

e.getClass.getName()=“org.bouncycastle.crypto.DataLengtheException”否。在我看来,它仍然像是DataLengtheException。如何知道它是不同类型的异常?请尝试e.getClass().getClassLoader()并将输出与此.getClass().getClassLoader()进行比较,以确定它是否是同一个classloader。在两个不同的类装入器上可能有两罐bouncy castle。尝试此.getClass().getClassLoader().getResources(“org/bouncycastle/crypto/DataLengtheException.class”)查看是否有两个条目以及这些JAR的位置。如果相同的类文件由两个不同的类加载器加载,它将永远不会被视为同一个类,因为类标识是由类加载器和完整的类名创建的。这是我能看到具有相同全名的类的对象会在测试实例中失败的唯一方法。检查您的工作区/运行时是否有多个bouncycastle JAR副本。因此,确实存在不同的类装入器。但是,我仔细检查了一遍,工作区中仍然只有一个jar。你对如何解决这个问题有什么想法吗?顺便说一句,看起来你在做一些疯狂的事情。这是针对一个真正的应用程序,还是您只是想弄清楚如何使用Java加密?
for (int i = 0; i < transformations.length; i++) {
    try {
        cipher = Cipher.getInstance(transformations[i], "BC");
        cipher.init(Cipher.DECRYPT_MODE, certificate);
        return cipher.doFinal(bytesTimestampEncrypted);
    }
    catch (ArrayIndexOutOfBoundsException e1) {
        // try the next transformation
    }
    catch (BadPaddingException e1) {
        // try the next transformation
    }
    catch (IllegalBlockSizeException e1) {
        // try the next transformation
    }
    catch (NoSuchPaddingException e) {
        // try the next transformation
    }
    catch (NoSuchAlgorithmException e) {
        // try the next transformation
    }
    catch (InvalidKeyException e) {
        // try the next transformation
    }
    catch (NoSuchProviderException e) {
        // try the next transformation
    }
    catch (DataLengthException e) {  
        // This is the one I am trying to catch
        Log.debug("Input too large for RSA cipher, trans=" + transformations[i], e);
    }
    catch (RuntimeException e) {   
        // This is the one that actually ends up catching it.
        throw e;
    }
}