当前位置: 首页 > 知识库问答 >
问题:

使用nimbus-jose和Java6的ECDH+JWE加密

徐飞尘
2023-03-14

我在用

jre 1.6.0,nimbus-jose-jwt-8.20-jdk6.jar,bcprov-jdk15to18-166.jar。

我用EC算法和椭圆曲线P-512创建了一个密钥库和一个密钥对。如果我使用私钥对JWT进行签名,然后尝试使用公钥对其进行验证,那么一切都可以正常工作,但是除了签名之外,我还需要进行加密,以生成一个看不到有效负载的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);

我还在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文件,但是正如我前面所说的,我的所有库都包含在类路径中。

是不是我错过了一些利比里亚的例子?我不知道,我被这个问题搞糊涂了

共有1个答案

龙德义
2023-03-14

问题是nimbus-jose-jwt-8.20-jdk6.jar不支持在Java6上运行,尽管它的名称中出现了'jdk6'。

之所以出现错误,是因为KeyUse类的hashcode()方法使用了Java.util.Objects实用程序类中的一个方法,而该类仅在Java7以后可用。

我强烈建议至少从Java6升级到Java8。这样做肯定能解决这个问题。但是,如果您使用Java6,则必须与Connect2Id联系并请求他们的支持。

 类似资料:
  • 我试图在Android(Java)中实现ECDH加密/解密和JWE。 我找到了jose4j和Nimbus JOSE库,它们旨在做我需要的一切,但似乎比我想象的更具挑战性。 如果有人熟悉的话,那就是3D安全2.0。。。 在以下规范中: SDK=本地端 DS=目录服务器(另一边) 接下来是规范: 给定:P(DS)-EC公钥(以PEM格式提供,可以转换为PublicKey或JWK) 生成新的短暂密钥对(

  • 我正在使用节点jose v0。11.0 (https://www.npmjs.com/package/node-jose)用于JWK和JWE操作。我有一个JWK格式的RSA密钥,可以加载到JWK密钥存储中,也可以再次提取。然而,当我尝试加密任何东西时,我会进入“error2”,“unsupported algorithm”。RSA怎么可能是不受支持的算法? 结果如下: 更新我在实际代码中挖掘了一点

  • 对示例代码中应用的概念“带RSA加密的JSON Web令牌(JWT)”有疑问 参见:http://connect2id.com/products/nimbus-jose-jwt/examples/jwt-with-rsa-encryption 我的问题:为什么客户端使用私钥?为什么不在加密器上使用私钥,在解密器类上使用公钥呢? 欢迎对此RSA示例代码的概念方面进行澄清。

  • 我们正在使用nimbus-jose-jwt第三方库中的RemoteJWKSet进行基于JWKSendpoint的JWT验证。 通过RemoteJWKSet,我们可以从远程endpoint检索JWK,检索到的JWK集被缓存,以便最大限度地减少网络调用。此外,它能够处理远程服务器上的密钥循环,因为每当密钥选择器试图获取带有未知子密钥的密钥时,缓存就会更新。 我的问题是,假设由于安全原因,从远程JWKS

  • 我想这个问题不是上当,所以我会试着解释一下我的情况。 我正在测试JWT,更具体地说是来自Github的JOSE-JWT lib,但是我遇到了一些麻烦。 我使用PHP和PHPSeclib生成一个私钥-公钥对,并将公钥发送给客户机。一切都是正确的,正如你在那里看到的。我的客户机接收JSON并将其转换为对象,然后使用JSON.NET将其提取为字符串。 还有弹力城堡: 例外情况: CreateToken方

  • jose 是一个国际象棋工具,你可以把游戏存储在 MySQL 数据库中。