使用nimbus jose和Java6的ecdh+jwe加密

hsvhsicv  于 2021-07-05  发布在  Java
关注(0)|答案(2)|浏览(585)

我有个问题,我想知道你是否能帮我。
我需要用椭圆曲线创建一个加密的jwe。
我正在使用
jre 1.6.0,nimbus-jose-jwt-8.20-jdk6.jar,bcprov-jdk15到18-166.jar。
我用ec算法和椭圆曲线p-512创建了密钥库和密钥对。如果我用私钥对jwt签名,然后用公钥验证它,那么一切都正常,但是除了签名之外,我还需要加密以生成一个jwe,在其中看不到有效负载。
当试图用公钥加密jwe时,它抛出以下异常

Exception in thread "main" java.lang.NoClassDefFoundError: java/util/Objects
at com.nimbusds.jose.jwk.KeyUse.hashCode(KeyUse.java:121)
at java.util.HashMap.put(Unknown Source)
at com.nimbusds.jose.jwk.KeyUseAndOpsConsistency.<clinit>(KeyUseAndOpsConsistency.java:43)
at com.nimbusds.jose.jwk.JWK.<init>(JWK.java:197)
at com.nimbusds.jose.jwk.ECKey.<init>(ECKey.java:706)
at com.nimbusds.jose.jwk.ECKey$Builder.build(ECKey.java:571)
at com.nimbusds.jose.crypto.ECDHEncrypter.encrypt(ECDHEncrypter.java:217)
at com.nimbusds.jose.JWEObject.encrypt(JWEObject.java:370)
at pruebasJwt.inicioJwt.main(inicioJwt.java:373)

这是我用来加密的代码:

//encriptar token
        ECPublicKey publicKey = (ECPublicKey) certificadoBean.getPublicKey();
        Payload payload = new Payload(signedJWT2);
        JWEObject jwe = new JWEObject(jweHeader, payload);                              
        jwe.encrypt(new ECDHEncrypter(publicKey)); //**This is where the exception occurs**
        String jweString = jwe.serialize();

        String tokenJwt = signedJWT2.serialize();
        System.err.println(tokenJwt);

我在eclipe类路径中很好地定义了这些库。
虽然我的要求是用椭圆曲线加密jwe,但我已经创建了一个测试证书rsa,这样我就能够用所说的证书生成一个加密的jwe而没有问题。
我还用了一个非常简单的例子,他们在https://connect2id.com/products/nimbus-jose-jwt/examples/jws-with-ec-signature 但对我来说也不管用。在创建密钥对时,我得到了相同的异常。

public class JweEC {

    public static void main(String[] args) {
        System.out.println("############ INICIO JWE FIRMADO CON CERTIFICADO CURVA ELIPTICA ##############");
        System.out.println("soporta ES512" + JCASupport.isSupported(JWSAlgorithm.ES512));

        //Proveedor de criptografica
        Provider bc = BouncyCastleProviderSingleton.getInstance();
        Security.addProvider(bc);
        System.out.println("soporta ES512" + JCASupport.isSupported(JWSAlgorithm.ES512));
        try {

            ECKey ecJWK = new ECKeyGenerator(Curve.P_521)
                    .generate();**This is where the exception occurs**
                ECKey ecPublicJWK = ecJWK.toPublicJWK();
        }catch (Exception e) {
            // TODO: handle exception
        }

    }

}

noclassdeffounderror异常表示负责动态类加载的类加载器找不到您尝试使用的类的.class文件,但正如我之前所说,我的所有库都包含在类路径中。
是不是我遗漏了一些利比里亚的东西?我不知道,我被这个问题迷住了

jyztefdp

jyztefdp1#

我收到了来自connect2id的回复,告诉我这是一个问题,正如luke所说,有一些东西是用java7编码的,这个案例就是其中之一。最后,使用nimbus-jose-jwt-6.8-jdk6.jar尝试其他版本,最终一切都如我所愿。

pw136qt2

pw136qt22#

问题是nimbus-jose-jwt-8.20-jdk6.jar不支持在Java6上运行,尽管名称中出现了“jdk6”。
你看到的错误是因为 hashCode() keyuse类的方法使用 java.util.Objects 实用程序类,该类仅从Java7开始提供。
我强烈建议至少从Java6升级到Java8。这样做肯定能解决这个问题。但是,如果您仍在使用Java6,则必须联系connect2id并请求他们提供支持。

相关问题